如何编写一个命令行来启动带有交互式 bash 的新 docker 容器并在其中执行一些命令?

如何编写一个命令行来启动带有交互式 bash 的新 docker 容器并在其中执行一些命令?

例如,假设我想要

docker run --interactive --tty ubuntu:18.04 bash
apt update; apt install -y git nano wget; mkdir t; cd t

而是使用一个单行命令。


我尝试失败:

docker run --interactive --tty ubuntu:18.04 (bash; apt update; apt install -y git nano wget; mkdir t; cd t)

docker run --interactive --tty ubuntu:18.04 "bash; apt update; apt install -y git nano wget; mkdir t; cd t"

答案1

使其成为一个bash命令,以最终调用结束,bash以便您获得交互式子 shell:

docker run --interactive --tty ubuntu:18.04 bash -c "apt update; apt install -y git nano wget; mkdir t; cd t; exec bash"

execexec 对于使新的 bash 成为容器的主进程是必要的,建议这样做(它将收到发送到容器的中断)。

也就是说,您应该将apt调用放入 Dockerfile 中并生成一个派生映像,您可以直接使用交互式 bash 启动该映像:

FROM ubuntu:18.04
RUN apt update && apt install -y git nano wget
RUN mkdir /somedir
WORKDIR /somedir

执行一次即可(或者直到您需要更新版本):

docker build -t testbuild .   # done once for all

docker run -it testbuild  # bash already in /somedir

相关内容