从映像运行容器,并在一个步骤中将shell导入容器?(即,在单个命令中运行docker和执行docker)

dced5bon  于 2022-12-03  发布在  Docker
关注(0)|答案(2)|浏览(110)

我经常做以下事情:

docker run -dt myimage
docker ps # This step gives the container id necessary for next step
docker exec -it <container-id> bash

理想情况下,我希望在一条线上完成所有操作

docker run -dt myimage && docker exec -it <id> bash

但是我不知道如何将容器id设置为docker exec,而不需要在单独的步骤中查找它。

问题

是否有一行程序可以运行映像并将shell装入其容器中?

aamkag61

aamkag611#

您可以为正在运行的容器指定一个名称,并以此方式引用它。

docker run --name mycontainer -d myimage
docker exec -it mycontainer bash

您还可以生成一个容器并直接跳转到shell。

docker run --name mycontainer --rm --entrypoint="" -it myimage bash

或者,您可以在容器内执行单一命令,然后结束。

docker run --name mycontainer --rm --entrypoint="" myimage echo "Hello, World!"
hof1towb

hof1towb2#

为了进一步了解@GarretHyde伟大的answer,这里有一个很好的命令序列(可以作为带有几个&&的单行运行),并将避免任何The container name xxxx is already in use错误:

{ docker stop $(docker ps -a -q) } || {} && \
docker container prune -f && \
docker build -t myimage . && \
docker run --name mycontainer -dt myimage && \
docker exec -it mycontainer bash

警告

docker stop $(docker ps -a -q)部件将stop all running containers
以及
docker container prune -f删除所有停止的容器
因此,请小心,并确保您可以与这两件事发生之前,使用这个。

备注

  • 这样做的一个很好的好处是,您可以编辑一个Dockerfile,然后在终端中按下Up,并按Enter键重新运行命令,该命令将在新容器中重建/run/shell。

相关问题