gpt4 book ai didi

docker - 阻止在撰写文件中定义的发布端口

转载 作者:行者123 更新时间:2023-12-02 02:21:57 26 4
gpt4 key购买 nike

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

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

为了进行开发,此撰写文件公开 8080,以便我可以从浏览器访问正在运行的代码。

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

有没有办法阻止docker-compose绑定(bind)服务端口?就像 --service-ports 标志的反转一样?

<小时/>

上下文:

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

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

最佳答案

Q. Is there a way to prevent docker-compose from binding service ports?

阻止您要求做的事情是没有意义的。 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:版本:“3”中不可用,但他们会再次将其恢复 in the future

关于docker - 阻止在撰写文件中定义的发布端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45100370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com