【问题标题】:Prevent publishing ports defined in compose file阻止在撰写文件中定义的发布端口
【发布时间】:2017-07-14 10:11:30
【问题描述】:

我有一个 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 测试。在这种情况下,我需要在运行测试之前启动前端,因为如果应用程序未启动,它们将失败。

【问题讨论】:

  • 如果CodeceptJS 是一个容器,本质上你可以将它作为服务添加到撰写文件中,然后对于frontend 服务包括CodeceptJS 作为links 候选者之一然后使用@ 987654330@ 而不是 ports 将 8080 公开给链接的服务。这行得通吗?

标签: docker docker-compose


【解决方案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。

【讨论】:

  • 聪明的方法,这听起来像是将所有这些都放在一个 compose 文件中而不需要维护两个单独的文件的最接近的解决方案。
  • 但是如果有很多容器,我会以docker-compose up 开头——这不允许我指定一个,而不是另一个。
【解决方案2】:

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

而不是使用这个:

ports:
    - 8080:8080

就用这个(在下面):

ports:
    - 8080

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 1970-01-01
    • 2019-01-08
    • 2020-02-29
    • 2021-12-26
    • 1970-01-01
    • 2015-12-20
    • 2019-04-23
    • 1970-01-01
    相关资源
    最近更新 更多