Docker组合和并发集成testing
编辑:对不起,我错了这个问题的第一部分。
所以我有一个 docker-compose.yaml
在同步运行时工作正常:
server: build: . dockerfile: "./docker/integration_tests/server/Dockerfile" links: - mongo environment: - "MONGO_URI=mongodb://mongo:27017/company" mongo: image: 'mongo:3.2.6' ports: - "27017"
当用这个命令启动时: docker-compose build && docker-compose up --abort-on-container-exit
然而,当我启动两三个工作来testing它是否并行工作(这是jenkins使用pipe道,所以他们有不同的目录)我看到这个工作A:
Successfully built 7b23b3a7b823 + docker-compose up --abort-on-container-exit Creating companyservercicd3_mongo_1 ERROR: for mongo Cannot start service mongo: driver failed programming external connectivity on endpoint companyservercicd3_mongo_1 (422826f73ce76526e4072f72a2b44467f9080e79a24d37d1fe2bba903854a698): Bind for 0.0.0.0:27017 failed: port is already allocated Encountered errors while bringing up the project.
而这个工作B:
Successfully built 80aa795867eb + docker-compose up --abort-on-container-exit Creating companyservercicd4_mongo_1 ERROR: for mongo Cannot start service mongo: driver failed programming external connectivity on endpoint companyservercicd4_mongo_1 (1591f2847e6c0d81f2c530874201ea912fa59ea35bfa27e5b25d7843e06da6b5): Bind for 0.0.0.0:27017 failed: port is already allocated Encountered errors while bringing up the project.
文档说这是关于ports
configuration选项:
公开港口。 既可以指定两个端口(HOST:CONTAINER),也可以指定容器端口(将select一个随机的主机端口)。
我一定是误解了一些东西,因为我认为27017
将在一个容器内,每个工作都有自己的容器。 我在这里做错了什么?
另一个有点相关的问题 – 这在Jenkins中效果很好,因为Jenkins正在为每个作业创build一个新的目录,所以没有名称冲突,但是有一种方法可以通过传递一个让每个运行都有自己的名字的选项来做到这一点? 另一个用户build议做这个解决方法:
`docker-compose run --rm --no-deps --name `uuidgen` ...`
但是这将需要我重做我的docker-compose.yml并将up
命令转换为等效的build/create/start/attach
所以我想这是一个虚惊 – 每个ports
下的清单项目有一个号码确定了我遇到的端口冲突。
我通过调用COMPOSE_ID=
docker-compose build
COMPOSE_ID=
来修复名称不够独特(因此不足以适应并发),如下所示: COMPOSE_ID=
uuidgen _; docker-compose -p $COMPOSE_ID build && docker-compose -p $COMPOSE_ID up --abort-on-container-exit
_; docker-compose -p $COMPOSE_ID build && docker-compose -p $COMPOSE_ID up --abort-on-container-exit
,用实际运行testing的命令居住在我docker-compose.yml