2017-07-14 109 views
1

定義防止出版的端口我有一個定義將運行我的應用程序和服務,該應用程序依賴於運行的服務的碼頭工人撰寫文件:在撰寫文件

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-compose綁定服務端口?像--service-ports旗的倒數?


對於背景:

在詹金斯我運行使用docker-compose run frontend yarn test,不會端口映射,所以是沒有問題的測試。

當我嘗試運行對應用程序的端到端瀏覽器測試時,會出現此問題。我使用容器對正在運行的應用程序實例運行CodeceptJS測試。在這種情況下,我需要在運行測試之前啓動前端,因爲如果應用程序未啓動,它們將失敗。

+0

如果'CodeceptJS'是一個容器,基本上你可以將它作爲一個服務添加到組合文件中,然後'前端'服務包含'CodeceptJS'作爲候選鏈接的一個,然後使用'expose'而不是'端口「將8080暴露給鏈接的服務。這會工作嗎? –

回答

1

問:是否有辦法阻止docker-compose綁定服務端口?

它是沒有意義的,以防止你要求做的事情。 docker-compose將以docker-compose.yml文件指示的方式啓動。

我建議使用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"可用,但他們會再次將其帶回in the future

+0

聰明的做法,這聽起來像是最接近的解決方案,使所有這一切在一個撰寫文件,而不需要維護兩個單獨的文件。 –