我如何 运行 docker-compose 多次而不会出现端口问题?
How can I run docker-compose multiple times without port issues?
我正在尝试使用 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
这很好用,但是当我尝试同时 运行 多个测试时,之前的 运行ning 测试立即退出,代码为 137。我认为这是因为服务绑定到主机网络,我不能用多个容器来做到这一点。
就我的目的而言,启动的两个服务只需要相互通信,根本不需要与主机通信。我对如何联网有点困惑。
您可以通过使用 COMPOSE_PROJECT_NAME
环境变量或 docker-compose
的 --project-name
标志指定不同的项目名称来实现。所有服务、网络和卷都是按项目创建和命名的。
您可以删除 ports
属性。
如果你愿意,你可以使用 expose
属性 代替(然后你只需要描述容器端口,例如 expose: - 9200
)但是 expose
是纯粹的纪录片,不是功能上需要的。
ports
属性 定义将在主机上公开的端口。
如果您不想|需要在主机上公开端口,则不需要。
我正在尝试使用 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
这很好用,但是当我尝试同时 运行 多个测试时,之前的 运行ning 测试立即退出,代码为 137。我认为这是因为服务绑定到主机网络,我不能用多个容器来做到这一点。
就我的目的而言,启动的两个服务只需要相互通信,根本不需要与主机通信。我对如何联网有点困惑。
您可以通过使用 COMPOSE_PROJECT_NAME
环境变量或 docker-compose
的 --project-name
标志指定不同的项目名称来实现。所有服务、网络和卷都是按项目创建和命名的。
您可以删除 ports
属性。
如果你愿意,你可以使用 expose
属性 代替(然后你只需要描述容器端口,例如 expose: - 9200
)但是 expose
是纯粹的纪录片,不是功能上需要的。
ports
属性 定义将在主机上公开的端口。
如果您不想|需要在主机上公开端口,则不需要。