Docker - составить несколько экземпляров на одной главной машине - PullRequest
2 голосов
/ 17 июня 2020

Вот как выглядит мой docker файл

version: "3"
services:
  controller:
    build: ./cd_controller
    image: cd_controller:latest
    env_file: $PWD/robot-configurations/.env
    cap_add:
      - ALL
    links:
      - test_fixture
    volumes:
      - dependencypackages:/root/dependency-packages
      - robotconfigurations:/root/robot-configurations
    container_name: controller_g5
  test_fixture:
    image: docker-standard-all.ur-update.dk/ur/pytest-ur:0.7.1
    volumes:
      - pytestfixture:/workspace
      - controllertests:/workspace/controller-tests
    entrypoint: /workspace/entrypoint.sh
    container_name: test_fixture
    stdin_open: true # docker run -i
    tty: true        # docker run -t
volumes:
  robotconfigurations:
    driver_opts:
      type: none
      device: $PWD/robot-configurations
      o: bind
  ...

В основном он имеет два контроллера служб / контейнеров и test_fixture. исходный код контроллера запущен, а test_fixture содержит все test_cases. test_fixture должен общаться с контроллером через сокет. Поскольку docker -compose создает сеть между своими контейнерами, в моих тестовых примерах py я просто использую

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("controller_g5", 30001)) # controller_g5 is name of the controller container 

. Пока все выглядит нормально. Но я понял, что у меня есть несколько версий / функций исходного кода. Поэтому я хотел бы создать несколько экземпляров одного и того же объекта, каждая из которых имеет свою собственную сеть. Блокирует ли присвоение имени контейнера создание контейнера с таким же именем в другой сети? Также я не уверен, как развернуть еще одну сеть с аналогичным контейнером на той же главной машине. Я наткнулся на Несколько изолированных сред на одном хосте Но не смог получить образец примера.

Любая помощь приветствуется.

1 Ответ

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

Вам просто нужно использовать другое имя проекта. По умолчанию compose использует имя каталога, в котором находится ваш проект, в качестве имени проекта. docker -compose заботится о настройке изолированной сети соответствующим образом для каждого проекта.

Чтобы создать два экземпляра вашего проекта с именами «dev» и «test», вы можете запустить его следующим образом:

docker-compose -p dev up

docker-compose -p test up 

From https://docs.docker.com/compose/reference/overview/

-p, --project-name NAME     Specify an alternate project name
                              (default: directory name)

Вам необходимо удалить поле container_name, чтобы несколько экземпляров проекта работали. Compose автоматически добавляет к именам контейнеров имя проекта, но не будет этого делать, если указано container_name. Вы можете столкнуться с конфликтом имен контейнера при запуске другого проекта из файла набора, если используется container_name. После удаления container_name ваши службы получат имена служб как имена хостов.

...