我有以下简单的python脚本,可以在本地正常运行:
script.py
with open('data.txt', 'a+') as f:
data = 'some data to be written to the file'
f.write(data)
我使用以下内容创建了一个docker映像:
FROM python:3
ADD script.py /
CMD ["python","./script.py"]
我可以以交互方式启动容器,并且可以在其中看到我的脚本,但是由于没有data.txt文件,它似乎没有执行?我很茫然。
PS C:\Docker\docker_chemtrail> docker run -it python-image-test /bin/bash
root@dea1f3583dd9:/# ls -l
total 68
drwxr-xr-x 1 root root 4096 May 8 01:41 bin
drwxr-xr-x 2 root root 4096 Mar 28 09:12 boot
drwxr-xr-x 5 root root 360 Jun 3 06:11 dev
drwxr-xr-x 1 root root 4096 Jun 3 06:11 etc
drwxr-xr-x 2 root root 4096 Mar 28 09:12 home
drwxr-xr-x 1 root root 4096 May 8 01:41 lib
drwxr-xr-x 2 root root 4096 May 6 00:00 lib64
drwxr-xr-x 2 root root 4096 May 6 00:00 media
drwxr-xr-x 2 root root 4096 May 6 00:00 mnt
drwxr-xr-x 2 root root 4096 May 6 00:00 opt
dr-xr-xr-x 118 root root 0 Jun 3 06:11 proc
drwx------ 1 root root 4096 May 8 05:27 root
drwxr-xr-x 3 root root 4096 May 6 00:00 run
drwxr-xr-x 1 root root 4096 May 8 01:40 sbin
-rwxr-xr-x 1 root root 102 Jun 3 05:40 script.py
drwxr-xr-x 2 root root 4096 May 6 00:00 srv
dr-xr-xr-x 13 root root 0 Jun 3 06:03 sys
drwxrwxrwt 1 root root 4096 May 8 05:30 tmp
drwxr-xr-x 1 root root 4096 May 6 00:00 usr
drwxr-xr-x 1 root root 4096 May 6 00:00 var
root@dea1f3583dd9:/#
应该注意,我是Python,Docker和Linux的初学者:)我事先表示歉意:)
答案 0 :(得分:1)
您的容器退出,因为您的script.py
脚本立即退出。为了保持容器的正常运行,您必须使进程处于前台。
我尝试通过添加睡眠功能来稍微更改脚本,并且它起作用了-
import time
with open('data.txt', 'a+') as f:
data = 'some data to be written to the file'
f.write(data)
time.sleep(60)
现在,如果您执行docker ps
,则必须能够看到容器已启动并正在运行,但这仅需一分钟,因为发布脚本将退出。
想想您的容器也是一个进程,如果该进程完成了它的工作,那么应该退出。
如果您有机会运行脚本,请查看输出但仍希望容器保持正常运行,您可以在Dockerfile中执行以下操作(hack)-
FROM python:3
ADD script.py /
RUN python ./script.py && \
cat data.txt
CMD tail -f /dev/null