如何将链接容器视为localhost?

时间:2015-06-21 09:39:21

标签: docker docker-compose

我有这两个容器:

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 $1 }'` curl http://localhost:3000

我总是拒绝连接。我可以通过其IP访问另一个容器,但我更喜欢将其作为localhost。

有可能吗?

1 个答案:

答案 0 :(得分:9)

这里似乎有些混乱。

看起来您正在尝试登录Web容器并使用localhost地址访问api容器?这不会起作用。

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

通过localhost访问只能在发布容器端口的Docker主机上运行。我想你可以通过Docker桥接器从容器内访问Docker主机(例如curl 172.17.42.1:3000),但这似乎是毫无意义的复杂和脆弱。