如何从Jenkins执行shell进入正在运行的Docker容器?

3
我正在从Jenkins执行shell中运行一个名为dind的Docker容器。 CONTAINER_ID="$(sudo docker run --privileged -i -d jpetazzo/dind)" 为了在容器内执行docker命令,我进入容器shell。 sudo docker exec -it --privileged ${CONTAINER_ID} bash 然后,我尝试在dind容器内执行以下命令: sudo docker pull hubuser/hello-world sudo docker run hubuser/hello-world sudo docker tag imageId hubuser/hello-world:123 sudo docker login --username=hubuser --password=password sudo docker push hubuser/hello-world 这7个命令都是我在Jenkins执行shell中编写的。以下给出的5个命令是在dind容器外执行的,而不是在容器内部执行。如果我从终端尝试,则会附加到容器shell并正常执行。但我想从Jenkins中执行它们。我还尝试在每个命令前添加exec,如下所示: sudo docker exec -it --privileged ${CONTAINER_ID} sudo docker pull hubuser/hello-world sudo docker exec -it --privileged ${CONTAINER_ID} sudo docker run hubuser/hello-world 等等。这将在dind容器内执行命令,但所有命令都是并行执行的,因此在拉取和运行hello-world映像之前,它尝试标记和推送它。这里找不到任何hello-world映像来标记,也不会执行任何操作。
我希望所有以下5个命令都能在dind容器内串行执行,而且是从Jenkins执行shell中执行。
1个回答

0

你的帖子标题是“如何SSH连接到正在运行的docker”。我想指出这篇文章,由一位Docker工程师撰写:如果你在Docker容器中运行SSHD,那么你做错了!

在阅读了你的帖子后,发现它并没有处理ssh问题,我只是想:为什么不执行一个顺序执行你想要的命令的bash脚本呢?

我不确定我是否理解得很好,Jenkins是否在一个docker中?你是否在docker中运行docker?


1
Jenkins不在docker内部,是的,我想使用Jenkins在docker内部构建和运行docker。我还考虑使用调用bash脚本的方式。 另一种方法是在基础Dockerfile中拉取和运行另一个docker,这样当我们构建第一个docker时,它将自动在其中启动另一个docker。这样做是否正确?因为如果我们想在其中执行更多操作,那么我们必须制作一个非常大的Dockerfile。 - Nitin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接