我正在尝试使用localhost
地址从另一个容器访问docker容器。
撰写文件非常简单。两个容器端口均暴露。 构建时没有问题。
在主机上,我可以成功执行curl http://localhost:8124/
并获得响应。
但是在django_container
内尝试相同的命令时出现Connection refused
错误。
我尝试将它们添加到同一网络中,结果仍然没有改变。
好吧,如果我尝试使用curl 'http://172.27.0.2:8123/'
之类的容器的内部ip执行,我会得到响应。
这是默认行为吗?如何使用clickhouse_container
到达localhost
?
version: '3'
services:
django:
container_name: django_container
build: ./django
ports:
- "8007:8000"
links:
- clickhouse:clickhouse
volumes:
- ./django:/usr/src/run
command: bash /usr/src/run/run.sh
clickhouse:
container_name: clickhouse_container
build: ./clickhouse
ports:
- "9001:9000"
- "8124:8123"
- "9010:9009"
答案 0 :(得分:0)
因此,在此行- "8124:8123"
处,您正在将Clickhouse容器的端口映射到localhost8124。这使您可以从localhost在8124端口访问Clickhouse。
如果要从dockerhost网络中点击Clickhouse容器,则必须使用容器的主机名。这就是我想要做的:
version: '3'
services:
django:
hostname: djano
container_name: django
build: ./django
ports:
- "8007:8000"
links:
- clickhouse:clickhouse
volumes:
- ./django:/usr/src/run
command: bash /usr/src/run/run.sh
clickhouse:
hostname: clickhouse
container_name: clickhouse
build: ./clickhouse
ports:
- "9001:9000"
- "8124:8123"
- "9010:9009"
如果您像我上面所做的那样进行更改,您应该能够从django容器中访问curl http://clickhouse:8123
这样的clickhouse。
答案 1 :(得分:0)
就像@Billy Ferguson的回答一样,您可以在主机上使用localhost
来访问,原因是:您定义了将localhost:8124
路由到clickhouse:8123
的端口映射。
但是从其他容器(Django)中删除时,您不能这样做。但是,如果您坚持要这样做,则有一个丑陋的解决方法:与network_mode
共享主机的网络名称空间,但是django容器将仅共享主机的所有网络。
services:
django:
hostname: djano
container_name: django
build: ./django
ports:
- "8007:8000"
links:
- clickhouse:clickhouse
volumes:
- ./django:/usr/src/run
command: bash /usr/src/run/run.sh
network_mode: "host"
答案 2 :(得分:0)
这取决于config.xml设置。如果在config.xml