我有这两个容器:
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。
有可能吗?
答案 0 :(得分:9)
这里似乎有些混乱。
看起来您正在尝试登录Web容器并使用localhost地址访问api容器?这不会起作用。
最好的解决方案就是使用您声明的链接;在Web容器中,您应该能够curl http://api:3000
。这是有效的,因为Docker为您为api容器添加了/etc/hosts
的条目。
通过localhost
访问只能在发布容器端口的Docker主机上运行。我想你可以通过Docker桥接器从容器内访问Docker主机(例如curl 172.17.42.1:3000
),但这似乎是毫无意义的复杂和脆弱。