链接Docker容器时Ubuntu无法到达主机

时间:2019-01-06 02:59:42

标签: macos docker ubuntu networking

我有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。

我想念什么?

2 个答案:

答案 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没有运行,因此链接无法正常工作。