我正在尝试在两个容器之间进行通信,但无法执行相同操作。
我在docker compose中添加了一个名为“服务器”的服务,该服务依赖于另一个名为“端点”的服务。
我需要将“端点”的ip和端口传递给“服务器”,并且我在做以下操作
command: -userver -e endpoint:51393
但是现在我使用下面的命令在主机列表中没有看到“端点”:
docker-compose exec server cat /etc/hosts
输出如下:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.21.0.3 49f4808fa677
我的完整docker-compose.yml文件如下:
version: '2'
services:
endpoint:
build:
context: .
dockerfile: Dockerfile
image: myimage_end:0.1
command: -uendpoint
ports:
- 51393:51393
networks:
- internal
server:
build:
context: .
dockerfile: Dockerfile
image: myimage_server:0.1
command: -userver -e endpoint:51393
ports:
- 51392:51392
depends_on:
- endpoint
networks:
- internal
volumes:
- /local_path/dataset:/dataset
networks:
internal:
driver: bridge
最佳答案
当您使用当前版本的docker compose时,不再需要通过操作容器的hosts文件来完成从另一个容器到达另一个容器的操作,因为这是一个非常静态的设置。
如今,docker-compose使用某种dns服务,该服务允许同一网络中的所有容器在其服务名称下相互查看。这允许从属容器停止,而不会导致从属容器也停止/重新启动。为此,您也无需指定depends_on
。仅在重新启动依赖项时才触发重新启动依赖服务。
有关更多详细信息,请查看关于联网的docker-compose docs。
一些用于调试情况的命令:
docker-compose exec server nslookup endpoint
docker inspect <container_name_of_service>
关于docker - Docker Compose V2网络错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41432297/