Docker Составьте зависимый именованный контейнер - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь вызвать мой контейнер, используя docker compose.Этот контейнер зависит от двух других контейнеров с именами «rabbitmq» и «mysqldb».

Мой сценарий заключается в том, что зависимые именованные контейнеры уже созданы с указанным именем.Это из-за некоторой дополнительной конфигурации, которая мне понадобилась для mysql.

Как я могу связать эти два контейнера с этим контейнером, используя docker-compose.Так что он также запускает мои именованные контейнеры при вызове этого контейнера myservice.

Буду признателен за любую помощь или направление.

myservice:
image:  myaccount/myservice
ports:
  - "8081:8081"
restart:  always
depends_on: 
  - rabbitmq
  - mysqldb
environment:
  SPRING_DATASOURCE_URL: 'jdbc:mysql://mysqldb:3306/myservice'
  SPRING_PROFILES_ACTIVE: 'mysql'
  SPRING_RABBITMQ_HOST: 'rabbitmq'
healthcheck:
  test: ["CMD", "curl", "-f", "http://192.168.99.100:8081/actuator/health"]
  interval: 1m30s
  timeout: 10s
  retries: 3

ОБНОВЛЕНИЕ :

Мне удалось решить эту проблему с помощью external_links и моста по умолчанию.

    version: '3'

myservice:
image:  myaccount/myservice
ports:
  - "8081:8081"
restart:  always
external_links: 
  - rabbitmq
  - mysqldb
network_mode: bridge
environment:
  SPRING_DATASOURCE_URL: 'jdbc:mysql://mysqldb:3306/myservice'
  SPRING_PROFILES_ACTIVE: 'mysql'
  SPRING_RABBITMQ_HOST: 'rabbitmq'
healthcheck:
  test: ["CMD", "curl", "-f", "http://192.168.99.100:8081/actuator/health"]
  interval: 1m30s
  timeout: 10s
  retries: 3

Любая другая альтернатива приветствуется.Проблема заключается в использовании этого подхода, зависимые док-контейнеры уже должны быть запущены.Тем не менее, в случае, если контейнеры Docker не работают, я хочу, чтобы составить так же контейнеры.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

docker-compose up не запускает уже созданные контейнеры.Он создает контейнеры из изображения и запускает их.Поэтому я предполагаю, что у вас уже есть изображения (или файлы Docker) для этих контейнеров.Однако вы можете использовать --no-recreate с docker-compose up для повторного использования уже построенных контейнеров, это может быть обходным решением, если у вас есть проблемы с регулярным использованием.

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

services:
    service1:
        image: images/service1image
    depends_on:
     - service2
     - service3
    service2:
        image: images/service2image
    service3:
        build: docker/service3

Вам не нужно определять сеть в соответствии с рекомендациями terrywb, если вы определяете их таким образом.docker-compose автоматически создает мостовую сеть для общего пользования и сопоставляет порты для всех определенных служб между ними.Однако, если вы не определите их как службу, вам, вероятно, потребуется определить сеть для их подключения. Конечно, если вы сделаете это, вы не сможете автоматически запускать их одновременно с помощью docker-составьте, что является целой проблемой, которую вы пытаетесь решить.Если вы действительно не хотите использовать их в качестве сервисов, я могу только предложить вам создать файл bash / shell для запуска.Как и тогда, вы пытаетесь сделать что-то за пределами функциональности, которую предоставляет docker-compose.

0 голосов
/ 06 декабря 2018

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

networks:
  mynet:

Затем добавьте эту сеть в каждое определение контейнера

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