【发布时间】:2021-11-05 05:42:12
【问题描述】:
我有一个Dockerfile,意思是使用script1,像这样:
# Pull from Debian
FROM debian
# Update apt and install dependencies
RUN apt update
RUN apt -y upgrade
RUN apt -y install wget curl
# Download script1.sh
RUN wget -O ./script1.sh https://example.com
# Make script1.sh executable
RUN chmod +x ./script1.sh
目前,我可以:
- 将此 Dockerfile 构建到映像中
- 在容器中运行所述图像
- 在所述容器中打开 CLI,并手动运行
script1(使用bash ./script1.sh) - 脚本运行,容器保持打开状态。
但是,我想在容器启动时自动运行此脚本。
所以我尝试将我的Dockerfile 更改为:
# Pull from Debian
FROM debian
# Update apt and install dependencies
RUN apt update
RUN apt -y upgrade
RUN apt -y install wget curl
# Download script1.sh
RUN wget -O ./script1.sh https://example.com
# Make script1.sh executable
RUN chmod +x ./script1.sh
# Run script1.sh on startup
CMD bash ./script1.sh
但是,当我这样做时,容器只保持打开一点,然后立即退出。
我怀疑它会在script1 完成后立即退出...
我也试过ENTRYPOINT,但没有多大成功。
如果我打开 CLI 并手动运行脚本,为什么我的容器会保持打开状态,但如果我尝试在启动时自动运行它却不会保持打开状态?
如何在容器启动时自动运行脚本,并防止容器立即退出?
【问题讨论】:
-
当你说“容器保持打开”时,它应该运行什么进程?或者如果没有特定的过程,为什么容器本身很重要? (“当我运行
ls时,如何防止进程在写入目录列表后退出?”) -
我认为您应该提供 script1.sh 或至少可以说明其作用的内容。
标签: docker shell dockerfile docker-container docker-image