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

时间:2019-04-12 11:06:52

标签: docker docker-compose circleci

我希望能够使用主机而不是服务名称连接到localstack。我已将localstack图像添加到我的docker-compose文件中并设置了network_mode: "host"。我可以从其他容器连接到http://localhost:8080。但是,我无法从主机连接到:http://localhost:8080。如何使用本地主机而不是服务名称连接到容器?不知道我是否误解了network_mode: "host"的作用。

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中,您只能在localhost上引用其他服务,而不能通过服务名称来引用。这意味着我的本地环境和测试环境配置之间存在一些差异。我尝试在CircleCI中运行docker-compose,但这样做时似乎在本地吓坏了。所以我想看看是否可以在docker-compose中的服务之间引用localhost。

1 个答案:

答案 0 :(得分:1)

发生这种情况是因为Docker for Mac使用xhyve虚拟机管理程序在虚拟机内部运行,而不是在macOS上本地运行。

使用net=host运行容器时,实际上是在使用VM的网络,而不是本地计算机的网络。

鉴于其工作方式的本质,这是Docker for mac的已知限制。

访问容器的唯一方法是使用端口映射,因此,如果您从docker-compose文件中删除network_mode:"host",则它应该已经在映射端口了。