防止在撰写文件中定义的发布端口
我有一个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"
不可用,但将来会再次使用 。