【问题标题】:How can I run docker-compose multiple times without port issues?如何在没有端口问题的情况下多次运行 docker-compose?
【发布时间】:2019-10-02 20:44:12
【问题描述】:

我正在尝试使用 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


    【解决方案1】:

    您可以通过使用COMPOSE_PROJECT_NAME 环境变量或docker-compose--project-name 标志指定不同的项目名称来做到这一点。所有服务、网络和卷都是按项目创建和命名的。

    【讨论】:

      【解决方案2】:

      您可以删除ports 属性。

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

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

      如果您不想|需要在主机上公开端口,则不需要它。

      【讨论】:

        猜你喜欢
        • 2021-08-19
        • 2021-12-28
        • 2013-12-31
        • 2018-08-19
        • 1970-01-01
        • 2021-05-15
        • 2016-12-03
        • 2020-08-23
        • 2018-02-17
        相关资源
        最近更新 更多