Как подключить docker-compose к сети контейнеров и локальной сети - PullRequest
0 голосов
/ 04 мая 2019

Как мне настроить файл docker-compose для подключения к внутренней сети контейнеров и к внешней локальной сети?

Я попытался использовать свойство extra_hosts в docker-compose, но не смог получитьрезультат, который мне нужен

Мой docker-compose содержит следующее:

version: '3.7'

    services:

        myapp1:
            container_name: 
                  myapp1
            hostname:
                  myapp1
            build: 
                  context: 
                       .
                  dockerfile: 
                       Dockerfile
            command: 
                  ["npm", "start"]
            networks:
                  - container_network # This is an internal container network

        myapp2:
             ... # Same idea as above
            networks:
                  - container_network # This is an internal container network

    networks: 

         container_network:
              name:
                   container_network
              driver: 
                   bridge

У меня также есть автономный сервис, и я запускаю его с помощью следующей команды:

docker run --name standalone_service --network host

Есть и другие причины, которые не имеют отношения к моему вопросу, почему standalone_service нельзя объединить в файл docker-compose.Поэтому объединение его в файл docker-compose и использование container_network не является опцией для этой службы.

Я хочу, чтобы myapp1, являющийся частью внутренней container_network, имел доступ к standalone_service, который находится нахост-сеть.Как мне это сделать?

1 Ответ

2 голосов
/ 04 мая 2019

Учитывая, что вы запустили standalone_service как --network host, он неотличим от любого другого процесса, выполняющегося на хосте, и от различных ответов на Изнутри контейнера Docker, как мне подключиться к [хост] машина должна работать на вас.

Вторым предпочтительным подходом может быть создание сети Docker вне Docker Compose и присоединение другого контейнера к этой сети

docker network create container_network
docker run --net container_network -p 8888:8888 --name standalone_service ...

Как только вы это сделаете, вы можете объявить ту же сеть в вашем docker-compose.yml, что и внешнюю сеть .Вы можете даже сделать это default сетью , чтобы вам не приходилось вручную настраивать другие службы для ее использования.

version: 3
services:
  myapp1:
    build: .
    ports: ['3000:3000']
    environment:
      MYAPP2_URL: 'http://myapp2/'
      STANDALONE_URL: 'http://standalone_service/'
    # gets `command:` from the Dockerfile
    # attaches to the `default` network
networks:
  default:
    external: true
    name: container_network

Вы также можете "одолжить"* по умолчанию default сеть, которую создает Docker Compose, если вы не возражаете начинать вещи в обратном порядке и в зависимости от деталей реализации.

docker-compose up -d
docker run --net dirname_default -p 8888:8888 --name standalone_service ...

Не существует такой вещи, как "подключение к внешней локальной сети"».Каждая сетевая среда (хост и отдельно каждый контейнер) имеет свою собственную "локальную сеть" 127.0.0.0/8;localhost привязан к IP-адресу 127.0.0.1, и это всегда означает «я»;в контексте Docker, «в частности, контейнер, из которого я звоню».

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