我所做的是:
docker run --rm -it SomeCentOsBasedImage
(in a docker container)
yum update -y
yum install -y vim cronie python3
vim /script.sh
#!/bin/bash
echo "a" >> /target.txt
chmod 777 script.sh
crontab -e
* * * * * /script.sh
crond -n
# indented lines should be written in the above file.
但这不起作用。
target.txt
未生成 该文件。
我检查了一下crontab -l
,结果显示如此* * * * * /script.sh
。
docker run --rm -it centos:7
当我在容器中执行完全相同的操作时,target.txt
文件就正确生成了。
我必须调试这个问题,但我所能做的只是检查crontab -l
。
我还能做些什么呢?
谢谢 :)
+ 我的Dockerfile
FROM centos:7
RUN localedef -c -i en_US -f UTF-8 en_US.UTF-8 && \
yum update -y
RUN yum install -y python3 cronie vim && \
pip3 install requests
WORKDIR /app
COPY . /app
COPY crontab /etc/cron.d/crontab
RUN chmod 0644 /etc/cron.d/crontab
RUN /usr/bin/crontab /etc/cron.d/crontab
CMD ["crond", "-n"]
crontab
文件:
➜ issue4 git:(feature/issue-4) cat crontab
* * * * * python3 /app/hello.py >> /var/log/cron.log
这样,在/var/log 就会生成一个日志文件。
但是,当我将基本图像更改为扩展图像(FROM Some.Registry.com/centos7
)时,不会生成日志。
答案1
通常,cron 根本不在容器内运行。您不应将容器视为虚拟机,尽管它们内部看起来很相似。
通常,容器中只运行一个进程。因此,如果您确实需要 cron,则必须特意安装并启动 crond(cron 守护程序),然后将其添加到启动容器时使用的命令中里面容器。
通常情况下,您会在容器外运行 cron,尽管 cron 命令本身可能会与您的容器交互。
现在,回答你最初的问题 - 不幸的是,没有足够的信息来解释为什么它适用于 centos:7,而使用扩展 centos:7 的映像会失败。你可能在同一个映像的不同容器中安装了 cron,而第二次运行应用程序时,你的修改就丢失了。我只是无法从这里判断。
当您说(in a docker container)
这些信息不够时。您是否docker exec
进入了已在运行的容器?
不管怎样,尽管你想要的完全有可能实现,但以这种方式去做却是不寻常的。