【问题标题】:How to SSH into running docker container from jenkins execute shell如何从 jenkins 执行 shell SSH 到正在运行的 docker 容器
【发布时间】:2016-03-04 12:04:40
【问题描述】:

我正在从 jenkins 执行 shell 运行一个 docker 容器 (dind)

CONTAINER_ID="$(sudo docker run --privileged -i -d jpetazzo/dind)"

要在容器内执行 docker 命令,我进入容器外壳

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

我在 jenkins 中编写的所有这 7 个命令都执行 shell。下面给出的 5 个命令在 dind 容器外执行,而不是在容器内执行。如果我从终端尝试而不是附加到容器外壳并正确执行。我想在容器内但从詹金斯执行它们。我还尝试在每个这样的命令之前添加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。

【问题讨论】:

    标签: linux shell jenkins ssh docker


    【解决方案1】:

    您帖子的标题是“如何通过 ssh 进入运行的 docker”。我只想指出这篇文章,由 Docker 工程师写的:If you run SSHD in your Docker containers, you're doing it wrong!

    读完你的帖子后,我只是想:为什么不执行一个 bash-script 来按顺序执行你想要的操作?

    我不确定我是否理解得很好顺便说一句,詹金斯在码头里吗?你是在 docker 中运行 docker 吗?

    【讨论】:

    • Jenkins 不在 docker 内部,是的,我想使用 jenkins 在 docker 内部构建和运行 docker。我也在考虑使用调用 bash 脚本。我猜还有另一种方法是在您的基础 Dockerfile 本身中拉取并运行另一个 docker,因此当我们构建第一个 docker 时,它会自动在其中启动另一个 docker。那会是正确的方法吗?因为如果我们想在其中做更多的事情,我们必须制作一个非常大的 Dockerfile。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多