如何将链接的容器视为本地主机?

How to see a linked container as localhost?

我有这两个容器:

api:
  image: social-learning
  ports:
    - "3000:3000"
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - ../api:/app
  expose:
    - "3000"
web:
  image: social-learning-frontend
  ports:
    - "4200:4200"
    - "9000:9000"
  command: ember serve -p 4200
  volumes:
    - .:/app
  links:
    - api
  expose:
    - "3000"

当我这样做时:

docker exec `docker ps -a | grep 'frontend_web_1' | awk '{print  }'` curl http://localhost:3000

我总是被拒绝连接。我可以通过它的 IP 访问另一个容器,但我更愿意以本地主机的身份访问它。

可能吗?

这里好像有点乱。

看起来您正在尝试登录 Web 容器并使用本地主机地址访问 api 容器?这行不通。

最好的解决方案就是使用您声明的 link;在 Web 容器中,您应该能够执行 curl http://api:3000。这是有效的,因为 Docker 已为您的 api 容器向 /etc/hosts 添加了一个条目。

通过 localhost 访问仅适用于发布容器端口的 Docker 主机。我想您可以通过 Docker 网桥(例如 curl 172.17.42.1:3000)从容器内访问 Docker 主机,但这似乎毫无意义地复杂和脆弱。