如何创建 Docker 容器并立即运行其中的命令?

use*_*527 2 docker

我还没有找到在新创建的 Docker 容器中自动运行命令的方法。我经常创建一次性容器(作为测试环境,下面的示例),这些容器受益于一些额外的软件包,并且可能需要在安装软件之前进行更新。

我更喜欢直接在交互式会话中运行该命令。

docker run --interactive --tty --rm fedora bash
docker run --interactive --tty --rm ubuntu bash
Run Code Online (Sandbox Code Playgroud)

目前,我不断将命令(包括apt update && apt upgrade -ydnf update -y)粘贴到容器 shell 中。

Ste*_*itt 5

至少对于 \xe2\x80\x9ctemporary\xe2\x80\x9d 容器来说,执行此操作的一种方法是保留sleep安装命令之后在容器中保持命令运行,然后在正在运行的容器中运行 shell:

\n
docker exec -it $(docker run -d --rm debian:unstable bash -c "apt-get update && apt-get upgrade -y && sleep 86400") bash\n
Run Code Online (Sandbox Code Playgroud)\n

此方法有一点不便,即交互式 shell 将在更新/升级完成之前启动。你\xe2\x80\x99也看不到apt-get除非您将终端附加到容器(在不同的窗口中),否则

\n

您还可以在安装命令后运行交互式 shell:

\n
docker run -it --rm debian:unstable bash -c "apt-get update && apt-get upgrade -y && bash"\n
Run Code Online (Sandbox Code Playgroud)\n