Как я могу запустить docker-compose несколько раз без проблем с портом? - PullRequest
1 голос
/ 02 октября 2019

Я пытаюсь использовать docker-compose для запуска тестов непрерывной интеграции на сервере Jenkins.

Вот мой docker-compose.yml:

version: '3'

services:
  elasticsearch:
    container_name: elasticsearch_${INSTANCE}
    image: docker.elastic.co/elasticsearch/elasticsearch:6.7.2
    ports:
      - 9200:9200
      - 9300:9300
    command: elasticsearch -E transport.host=0.0.0.0
    environment:
      ES_JAVA_OPTS: "-Xms2g -Xmx2g"
      discovery-type: single-node
  mainapp:
    container_name: mainapp_${INSTANCE}
    image: testbot:${INSTANCE}
    environment:
      ES_ADDRESS: http://elasticsearch_${INSTANCE}:9200
      SUBSET: ${SUBSET}
      DIRECTORY: ${DIRECTORY}
      INSTANCE: ${INSTANCE}
      TEST_CMD: ${TEST_CMD}
    command: /bin/bash /mainapp/build/tests/wrapper.sh

Это прекрасно работает,но когда я пытаюсь запустить несколько тестов одновременно, ранее запущенный тест немедленно завершается с кодом 137. Я думаю, это потому, что сервисы привязаны к сети хоста, а я не могу сделать это с несколькими контейнерами.

Для моих целей две запущенные службы должны взаимодействовать только друг с другом, а не с хостом вообще. Я немного запутался в том, как именно это организовать.

Ответы [ 2 ]

1 голос
/ 03 октября 2019

Вы можете удалить свойство ports.

Если хотите, вы можете вместо этого использовать свойство expose (и тогда вам нужно только описать порт контейнера, например, expose: - 9200), но expose является чисто документальным и функционально не требуется.

Свойство ports определяет порты, которые будут отображаться на хосте.

Если вы не хотите, чтобы | порты отображались нахозяин, тебе это не нужно.

0 голосов
/ 03 октября 2019

Вы можете сделать это, указав другое имя проекта, используя переменную окружения COMPOSE_PROJECT_NAME или флаг --project-name для docker-compose. Все сервисы, сети и тома создаются и именуются для каждого проекта.

...