Jenkins Docker Compose-随机网络名称

Jenkins Docker Compose-随机网络名称,jenkins,network-programming,docker-compose,Jenkins,Network Programming,Docker Compose,我有一个项目,有3个容器,将由我们的詹金斯构建系统运行。我这样做是为了让这3个容器可以相互通信,现在我需要弄清楚是否正在进行同步构建,如何使用某种UUID或随机生成的网络名称与docker compose?我需要这样做,这样它们的容器就不会意外地与来自不同构建的其他类似命名的容器通信 有没有办法在docker compose文件中创建一个随机生成的名称?假设您的CI从git签出您的源代码,您可以使用git commit作为容器/图像/网络的唯一标识符;e、 g # get the sha of

我有一个项目,有3个容器,将由我们的詹金斯构建系统运行。我这样做是为了让这3个容器可以相互通信,现在我需要弄清楚是否正在进行同步构建,如何使用某种UUID或随机生成的网络名称与docker compose?我需要这样做,这样它们的容器就不会意外地与来自不同构建的其他类似命名的容器通信


有没有办法在docker compose文件中创建一个随机生成的名称?

假设您的CI从git签出您的源代码,您可以使用git commit作为容器/图像/网络的唯一标识符;e、 g

# get the sha of the commit that you're building from
export GIT_COMMIT=$(git rev-parse --short HEAD)

# build your image
docker build -t myimage:git-${GIT_COMMIT} .

# create your network
docker network create nw_${GIT_COMMIT}

# start your container
docker run -d --network=nw_${GIT_COMMIT} --name=foo_${GIT_COMMIT} myimage:git-${GIT_COMMIT}
与docker撰写 根据当前git提交设置项目名称;设置
COMPOSE\u PROJECT\u NAME
环境变量将覆盖默认项目名称(基于当前目录的名称)。还设置了一个
GIT_COMMIT
环境变量,以便可以单独使用

export COMPOSE\u PROJECT\u NAME=myproject\u$(git rev parse——短头)
导出GIT_COMMIT=$(GIT rev parse——短头)
创建一个
docker compose.yml
Dockerfile

版本:“3.7”
服务:
网状物:
建造:
上下文:。
args:
GIT_提交:
图片:myproject/web:${GIT_COMMIT:-未知}
Dockerfile:

FROM nginx:alpine
ARG GIT_COMMIT=unknown
RUN echo "This is build ${GIT_COMMIT}" > /usr/share/nginx/html/index.html
运行前清理所有内容(同一项目的其他实例;旧版本的映像、卷)

为您的服务构建映像

docker-compose build

Building web
Step 1/3 : FROM nginx:alpine
 ---> 315798907716
Step 2/3 : ARG GIT_COMMIT=unknown
 ---> Running in 78515fcdd331
Removing intermediate container 78515fcdd331
 ---> bb2414522a62
Step 3/3 : RUN echo "This is build ${GIT_COMMIT}" > /usr/share/nginx/html/index.html
 ---> Running in 9bf1f2023915
Removing intermediate container 9bf1f2023915
 ---> 3debb1a96b63

Successfully built 3debb1a96b63
Successfully tagged myproject/web:a9f48b5
然后开始堆叠

docker-compose up -d
Creating network "myproject_a9f48b5_default" with the default driver
Creating myproject_a9f48b5_web_1 ... done
查找分配给
web
服务的随机端口

docker-compose port web 80
0.0.0.0:32770
并连接到它:

curl localhost:32770
This is build a9f48b5

这个想法可能行得通。我担心的是,如果有人(意外或故意)使用相同的提交两次踢相同的构建。我还想知道是否有办法在docker compose yml文件中实现这一点,而不是使用普通的docker调用。上面的调用是为了指定您的方法吗?“我担心的是,如果有人(意外地或故意地)使用相同的提交两次踢相同的构建”,这可能是一个极端情况,但您当然可以添加一个步骤,在启动新的容器和网络之前强制停止/删除以前的容器和网络(
docker rm-f foo)_${GIT_COMMIT}
docker network rm nw${GIT_COMMIT}
。docker Compose也应该可以工作,而且
docker Compose
可以使用环境变量替换实际上,对于docker Compose,它更容易;将项目名称设置为GIT COMMIT;我将在稍后更新示例
curl localhost:32770
This is build a9f48b5