Выполнить несколько `docker -compose run`, которые инкапсулированы друг от друга - PullRequest
1 голос
/ 18 января 2020

У меня есть файл docker-compose, который выглядит следующим образом:

  mongo:
    image: mongo:3.6.12
    container_name: mongo-${BUILD_ID}
  app:
    image: repo/my-image:latest
    container_name: app-${BUILD_ID}
    working_dir: /src
    depends_on:
      - mongo

Я запускаю его в конвейере CI / CD для параллельного выполнения тестов через docker-compose run app run-test-1.sh, но заметил только один экземпляр mongo контейнера создан. Это, кажется, приводит к тому, что тесты мешают друг другу. Можно ли сделать docker-compose run таким, чтобы он одновременно создавал и службу app, и службу mongo, и инкапсулировал ее из других docker-compose run контейнеров, чтобы у каждого из них был свой экземпляр mongo?

Я пробовал следующее безрезультатно:

  • Добавление свойства container_name: mongo-${BUILD_ID} в docker-compose.yml
  • Добавление флага --name при выполнении команды. т.е. docker-compose run --name id1 app run-test-1.sh

1 Ответ

1 голос
/ 18 января 2020

удалось выяснить это. docker-compose имеет флаг --project-name, который будет использоваться вместо значения по умолчанию (имя папки).

Таким образом, мой docker-compose.yml выглядит следующим образом:

  mongo:
    image: mongo:3.6.12
  app:
    image: repo/my-image:latest
    working_dir: /src
    depends_on:
      - mongo

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

  • docker-compose --project-name project1 run app ./run-test1.sh.
  • docker-compose --project-name project2 run app ./run-test2.sh.
  • docker-compose --project-name project3 run app ./run-test3.sh.

I

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