阻止在撰写文件

时间:2017-07-14 10:11:31

标签: docker docker-compose

我有一个docker compose文件,用于定义将运行我的应用程序的服务以及该应用程序依赖于运行的服务:

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

对于开发,此compose文件公开8080,以便我可以从浏览器访问正在运行的代码。

但是在jenkins中,我无法公开该端口,因为同时运行的两个作业会发生冲突,试图绑定到jenkins上的同一个端口。

有没有办法阻止docker-compose绑定服务端口?就像--service-ports旗的倒数一样?

上下文:

在jenkins中,我使用docker-compose run frontend yarn test运行测试,这些测试不会映射端口,所以不是问题。

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

2 个答案:

答案 0 :(得分:1)

  

Q值。有没有办法阻止docker-compose绑定服务端口?

没有必要阻止你要求做的事情。 docker-compose将在docker-compose.yml文件指示的情况下启动内容。

我建议使用frontend重复extends:服务:

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

答案 1 :(得分:0)

  

为防止在Docker网络外部发布端口,您只需   需要在端口段中的单个端口上写。

而不是使用它:

ports:
    - 8080:8080

只需使用这个(如下):

ports:
    - 8080