Ubuntu не может получить доступ к хосту при связывании контейнеров Docker - PullRequest
0 голосов
/ 06 января 2019

У меня есть 3 докеризованных сервиса. Службы A и B запускаются в одном файле docker-compose:

докер-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, но она запускается отдельно, используя docker без compose (это потому, что я передаю опцию --network). Итак, я запускаю сервис C, связывающий A и B:

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 голосов
/ 07 января 2019

Глупый я. На самом деле, моя конфигурация верна, но службы A и B не были запущены из-за ошибки уровня приложения, поэтому ссылки не работали.

0 голосов
/ 06 января 2019

У вас может быть опечатка в вашем вопросе, поскольку этот файл compose вообще не должен запускаться, сетевые имена уровня обслуживания my_net должны соответствовать сетевому имени верхнего уровня, которое затем можно переименовать с помощью name: intra_net. Сеть, заданная в команде docker run, должна соответствовать тому, что сеть была переименована в разделе сетей верхнего уровня (и эта сеть должна уже существовать, поэтому сначала запустите стек компоновки).

рабочий пример:

докер-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 run --network infra_network odise/busybox-curl curl -s service_b:5678
hello world
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...