我如何多次运行docker-compose而没有端口问题?

问题描述 投票:0回答:2

我正在尝试使用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退出。我认为这是因为服务绑定到主机网络,而我不能使用多个容器来做到这一点。

出于我的目的,启动的两个服务仅需要相互通信,而根本不需要与主机通信。我有点不知道该如何联网。

docker elasticsearch docker-compose docker-networking
2个回答
1
投票

您可以删除ports属性。

[如果您愿意,可以改用expose属性(然后只需要描述容器端口,例如expose: - 9200),但是expose纯粹是文档性的,在功能上不是必需的。

ports属性定义将在主机上公开的端口。

如果您不想在主机上暴露端口,则不需要它。


0
投票

您可以通过使用COMPOSE_PROJECT_NAME环境变量或--project-namedocker-compose标志指定不同的项目名称来执行此操作。所有服务,网络和卷均按项目创建和命名。

© www.soinside.com 2019 - 2024. All rights reserved.