我有3个dockerized服务。服务A和B在同一个docker-compose文件中运行:
docker-compose.yml
version: '3.5'
services:
service_a:
container_name: service_a
networks:
- my_net
service_b:
container_name: service_b
networks:
- my_net
networks: #This is just because I wanted to change the network default name
my_net:
name: my_net
服务C需要针对服务A和B发出请求,但是它无需使用compose就可以使用docker单独运行(这是因为我传递了--network
选项)。因此,我运行将链接A和B的服务C:
docker run --network my_net --link service_a --link service_b service_c_docker_image
这可以在MacOS上运行,但不能在Ubuntu上运行!
如果我运行ping命令,而不是默认的service_c_docker_image命令:
docker run --network my_net --link service_a --link service_b service_c_docker_image ping service_a
在MacOS上,主机已正确访问;在Ubuntu上,我得到:ping: service_a: Name or service not known
。和service_b
一样。
两台机器都使用相同版本的docker和docker-compose。
我想念什么?
答案 0 :(得分:1)
您可能在输入中遇到错字,因为该撰写文件根本不应运行,服务级别的网络名称my_net
应该与顶级网络名称匹配,然后可以使用name: intra_net
重命名。在docker run
命令中设置的网络应该与在顶级网络部分中重命名的网络相匹配(并且该网络已经存在,因此请首先运行撰写堆栈)。
工作示例:
docker-compose.yaml
version: '3.5'
services:
service_a:
image: odise/busybox-curl
command: ["curl", "-s", "service_b:5678"]
depends_on:
- service_b
networks:
- my_net
service_b:
image: hashicorp/http-echo
command: ["-text", "hello world"]
networks:
- my_net
networks:
my_net:
name: infra_network
运行服务docker-compose up -d
并检查日志:
> docker-compose logs
Attaching to docker-compose-networks_service_a_1, docker-compose-networks_service_b_1
service_b_1 | 2019/01/06 05:53:55 Server is listening on :5678
service_b_1 | 2019/01/06 05:53:55 service_b:5678 172.19.0.3:46900 "GET / HTTP/1.1" 200 12 "curl/7.39.0" 106.6µs
service_a_1 | hello world
然后使用docker启动另一个容器
> docker run --network infra_network odise/busybox-curl curl -s service_b:5678
hello world
答案 1 :(得分:0)
愚蠢的我。实际上,我的配置正确,但是由于应用程序级错误,服务A和B没有运行,因此链接无法正常工作。