Docker 如何使用主机而不是服务名称连接到容器?

Docker 如何使用主机而不是服务名称连接到容器?,docker,docker-compose,circleci,Docker,Docker Compose,Circleci,我希望能够使用主机而不是服务名连接到localstack。我已将localstack图像添加到我的docker compose文件中,并设置网络模式:“主机”。我可以连接到http://localhost:8080来自我的其他容器。但是,我无法连接到:http://localhost:8080来自我的主机。如何使用localhost而不是服务名称连接到容器?不确定我是否误解了网络模式:“主机”的作用 version: "3" services: localstack: image:

我希望能够使用主机而不是服务名连接到localstack。我已将
localstack
图像添加到我的docker compose文件中,并设置
网络模式:“主机”
。我可以连接到
http://localhost:8080
来自我的其他容器。但是,我无法连接到:
http://localhost:8080
来自我的主机。如何使用localhost而不是服务名称连接到容器?不确定我是否误解了
网络模式:“主机”
的作用

version: "3"
services:
  localstack:
    image: localstack/localstack:latest
    network_mode: "host"
    ports:
      - "4567-4584:4567-4584"
      - "${PORT_WEB_UI-8080}:${PORT_WEB_UI-8080}"
    environment:
      - AWS_REGION=us-east-1
      - SERVICES=sqs

问题是我正在使用CircleCI运行一些组件测试,但在CircleCI中,您似乎只能引用本地主机上的其他服务,而不能通过服务名称。这意味着我的本地环境和测试环境配置之间存在一些差异。我试着在CircleCI运行docker compose,但这样做时,它似乎会在本地崩溃。所以我想看看是否可以在docker compose中的服务之间引用localhost。

这是因为docker for Mac在虚拟机中运行,使用的是xhyve虚拟机监控程序,而不是macOS上的本机监控程序

当您使用
net=host
运行容器时,您实际上使用的是虚拟机的网络,而不是本地机器的网络

鉴于Docker for mac的工作性质,这是Docker for mac的一个已知限制


访问容器的唯一方法是使用端口映射,因此,如果您从docker compose文件中删除
网络模式:“主机”
,它应该可以工作,因为您已经在映射端口了。

您使用的是哪种操作系统?mac high Sierra能否详细说明您在CircleCI上使用docker compose时遇到的问题?根据我的经验,这非常有效,至少在Docker executor中是这样。但是,我不能访问localhost上的其他服务,而是在不使用
网络\u模式时通过服务名称:“主机”
。问题是我正在使用circle ci运行一些组件测试,但在circle ci中,您似乎只能引用本地主机上的其他服务,而不能通过服务名称。这意味着我的本地环境和测试环境配置之间存在一些差异。我试着在circleci运行docker compose,但这样做时,它似乎会在本地崩溃。所以我想看看是否可以在docker-compose.Ok中的服务之间引用localhost。我想我知道你的意思。这可能更多的是关于CircleCI如何工作以及如何在那里配置管道的问题。如果您使用docker compose运行localstack,而CircleCI或类似软件在docker compose服务之外运行单独的服务,则您将无法按服务名称调用,因为这仅适用于在同一网络中运行的容器,因此,您需要告诉CircleCI在docker compose服务所在的网络中运行这些组件,或者使用localhost调用它。我认为你需要用这些新信息更新你的问题。