启动 docker 容器时运行命令行

时间:2021-03-23 10:00:19

标签: docker dockerfile

就我而言,您可以在使用 RUN 构建映像或使用 CMD 运行容器时运行命令行。在启动 docker 容器时无论如何都要这样做吗?

我的目标是在输入 docker start my_container_name 后自动运行 gcloud 数据存储区。

如果可以,我应该对我的 Dockerfile 应用哪些更改?

(我已经安装了所有需要的包,我可以在 docker run --name my_container_name -i -t my_image_name 之后运行该命令,但我希望它在启动容器时也能运行)

1 个答案:

答案 0 :(得分:2)

Docker 在构建映像时执行 RUN 命令。

Docker 执行 ENTRYPOINT 命令在您启动容器时CMD 作为 ENTRYPOINT 的参数。当您从图像创建容器时,这两者都可以被覆盖。它们在 Dockerfile 中的目的是为您或其他人将来从该镜像创建容器时提供默认值。

考虑示例:

FROM debian:buster

RUN apt update && apt install procps

ENTRYPOINT ["/usr/bin/ps"]
CMD ["aux"]

RUN 命令将 ps 命令添加到图像中,ENTRYPOINTCMD 不会执行,但它们会在您运行容器时执行:

# create a container named 'ps' using default CMD and ENTRYPOINT
docker run --name ps my_image
# equivalent to /usr/bin/ps aux

# start the existing container 'ps'
docker start ps
# equivalent to /usr/bin/ps aux

# override CMD
docker run my_image au
# equivalent to /usr/bin/ps au

# override both CMD and ENTRYPOINT
docker run --entrypoint=/bin/bash my_image -c 'echo "Hello, world!"'
# will print Hello, world! instead of using ps aux

# no ENTRYPOINT, only CMD
docker run --entrypoint="" my_image /bin/bash -c 'echo "Hello, world!"'
# the output is the same as above

每次使用 docker run 时都会创建一个容器。使用的 ENTRYPOINTCMD 被保存为容器属性并在每次启动容器时执行。