防止在撰写文件中定义的发布端口

我有一个docker撰写文件,它定义了一个服务,它将运行我的应用程序和一个该应用程序依赖运行的服务:

services: frontend: build: context: . volumes: - "../.:/opt/app" ports: - "8080:8080" links: - redis image: node command: ['yarn', 'start'] redis: image: redis expose: - "6379" 

为了开发这个组合文件公开8080以便我可以从浏览器访问正在运行的代码。

然而在jenkins,我不能公开那个端口,那么两个同时运行的工作将会冲突,试图绑定到jenkins上的同一个端口。

有没有办法阻止docker写作绑定服务端口? 就像--service-ports标志的--service-ports一样?


对于上下文:

在jenkins我运行testing使用docker docker-compose run frontend yarn test将不映射端口,所以不是一个问题。

当我尝试对应用程序运行端到端的浏览器testing时,会出现此问题。 我使用容器来运行应用程序正在运行的实例的CodeceptJStesting。 在这种情况下,我需要在运行testing之前启动前端,因为如果应用程序不启动,它们将会失败。

问:是否有办法阻止docker组合绑定服务端口?

防止你要做的事是没有意义的。 docker-compose将会像docker-compose.yml文件指出的那样启动。

我build议使用extends:复制frontend服务:

 version: "2" services: frontend-base: build: context: . volumes: - "../.:/opt/app" image: node command: ['yarn', 'start'] frontend: extends: frontend-base links: - redis ports: - "8080:8080" frontend-test: extends: frontend-base links: - redis command: ['yarn', 'test'] redis: image: redis expose: - "6379" 

所以这样使用它:

 docker-compose run frontend # in dev environment docker-compose run frontend-test # in jenkins 

请注意, extends:version: "3"不可用,但将来会再次使用 。