Python脚本未在Docker容器内执行

时间:2019-06-03 06:12:19

标签: python docker

我有以下简单的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的初学者:)我事先表示歉意:)

1 个答案:

答案 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