docker - составить запуск с указанным сетевым именем - PullRequest
0 голосов
/ 17 июня 2020

У меня есть файл docker -compose с тремя службами (Solr, PostgreSQL и pgAdmin), все из которых используют сеть Docker.

version: '2'
services:
  solr:
    image: solr:7.7.2
    ports:
      - '8983:8983'
    networks:
      primus-dev:
        ipv4_address: 10.105.1.101
    volumes:
      - data:/opt/solr/server/solr/mycores
    entrypoint:
      - docker-entrypoint.sh
      - solr-precreate
      - primus
      - /opt/solr/server/solr/configsets/sample_techproducts_configs
    environment:
      - SOLR_HEAP=2048m
    logging:
      options:
        max-size: 5m

  db:
    image: "postgres:11.5"
    container_name: "primus_postgres"
    ports:
      - "5432:5432"
    networks:
      primus-dev:
        ipv4_address: 10.105.1.102
    volumes:
      - primus_dbdata:/var/lib/postgres/data
    environment:
      - POSTGRES_DB=primus75
      - POSTGRES_USER=primus
      - POSTGRES_PASSWORD=primstav

  pgadm4:
    image: "dpage/pgadmin4"
    networks:
      primus-dev:
        ipv4_address: 10.105.1.103
    ports:
      - "3050:80"
    volumes:
      - /home/nils/docker-home:/var/docker-home
    environment:
      - PGADMIN_DEFAULT_EMAIL=nils.weinander@kulturit.se
      - PGADMIN_DEFAULT_PASSWORD=dev

networks:
  primus-dev:
    driver: bridge
    ipam:
      config:
        - subnet: 10.105.1.0/24

volumes:
  data:
  primus_dbdata:

Это отлично работает после docker - составить (по крайней мере, pgAdmin может разговаривать с PostgreSQL).

Но тогда у меня есть сценарий (на самом деле цель make, но не в этом суть), который строит , запускает и удаляет контейнер с помощью docker -compose run :

docker-compose run -e HOME=/app -e PYTHONPATH=/app/server -u 0 --rm backend \
    bash -c 'cd /app/server && python tools/reindex_mp.py -s -n'

Это не работает, поскольку reindex_mp.py не может достичь Solr 10.105.1.101, как один выстрел контейнер не находится в той же сети Docker. Итак, есть ли способ указать docker -compose использовать именованную сеть с docker -compose run ? docker запустить имеет параметр - сеть , но он недоступен для docker -compose.

1 Ответ

1 голос
/ 18 июня 2020

Вы можете создать сеть docker за пределами вашего docker -compose и использовать эту сеть при запуске служб в docker -compose.

docker network create my-custom-created-network

теперь внутри вашего docker -compose, используйте эту сеть следующим образом:

services:
  serv1:
    image: img
    networks:
      my-custom-created-network

networks:
  my-custom-created-network:
    external: true

В примере создания сети создается мостовая сеть. Для доступа к контейнерам через хосты используйте оверлейную сеть.

Вы также можете использовать сеть, созданную внутри docker -compose, и подключать контейнеры к этой сети.

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

вы можете найти сетевое имя, выполнив эту команду:

docker network ls

Используйте соответствующее сетевое имя при запуске контейнера, например, это

docker run [options] --network <network-name> <image-name>

Примечание. Контейнеры в одной сети доступный с использованием имен контейнеров, вы можете использовать это вместо использования ips

...