Контейнер Docker соединяется с контейнером: соединение отказано - PullRequest
0 голосов
/ 10 октября 2019

Когда все запускаются автономно за пределами докера, это работает без проблем, когда ядро ​​пытается получить от cerner. Однако, делая то же самое, когда все докеризированы, как показано ниже, я получаю:

Get http://cerner:8602/api/v1/patient/search:, набираем TCP 192.168.240.4:8602: connect: соединение отклонено. .4 - это IP-адрес контейнера cerner, а .2 - это IP-адрес основного контейнера.

Cerner - это имя контейнера, вызываемого из основного. Если я изменю имя на ip-адрес хост-сервера и использую порты, это также будет работать нормально. Он просто не позволяет контейнеру использовать контейнеры DNS или IP. Я попытался с частной сетью и без нее и получил одно и то же.

Все контейнеры с нуля.

version: '3.7'

services:    caConnector:
      image: vertisoft/ca_connector:latest
      ports:
        - "8601:7001"
      env_file:
        - .env.ca_connector
      networks:
        - core-net

   fhir:
      image: vertisoft/fhir_connector:latest
      container_name: cerner
      ports:
        - "8602:7002"
      env_file:
        - .env.fhir_connector
      networks:
        - core-net

   core:
      image: vertisoft/core:latest
      ports:
        - "8600:7000"
      env_file:
        - .env.core
      networks:
        - core-net

networks:   core-net:
    driver: bridge

1 Ответ

2 голосов
/ 10 октября 2019

Службу контейнеров следует вызывать с containerPort, а не с hostPort в службе связи службы. в вашем случае это должно быть 7000 to 7002 для любого контейнера для подключения с использованием имени контейнера.

Get http://cerner:8602/api/v1/patient/search: наберите TCP 192.168.240.4:8602: connect: соединение отклонено.

Как и в случае ошибки, он пытается установить соединение, используя порт публикации.

Например,

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

При запуске docker-compose up происходит следующее:

Создана сеть myapp_default.

Контейнер создан с использованием веб-конфигурации. Он присоединяется к сети myapp_default под именем web. Контейнер создается с использованием конфигурации базы данных. Он присоединяется к сети myapp_default под именем db.

В v2.1 + оверлейные сети всегда подключаемы

Теперь каждый контейнер может искать имя хоста web или db и возвращать соответствующий контейнерАйпи адрес. Например, код веб-приложения может соединиться с URL postgres: // db: 5432 и начать использовать базу данных Postgres.

Важно отметить различие между HOST_PORT и CONTAINER_PORT . В приведенном выше примере для db HOST_PORT равен 8001, а контейнерный порт равен 5432 (postgres по умолчанию). Сетевой сервис-сервис связь использует CONTAINER_PORT . Когда HOST_PORT определен, сервис доступен и вне роя.

В веб-контейнере ваша строка соединения с db будет выглядеть как postgres://db:5432, а с хост-машины строка соединения будет выглядеть какpostgres://{DOCKER_IP}:8001.

compose-network

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...