首页 > 解决方案 > 在 docker 的入口点上运行命令输出没有文件错误

问题描述

在一个简单的 dockerfile 上:

FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /code/

如果我运行:

docker build -t my_image .
docker run -v ~/Downloads/data/:/home -it -d my_image # mount data folder inside home
docker exec -it container_id  sh -c  "python script.py -i /home/db.sqlite"

一切运行正常。但我想运行script.pyon run 这样就不需要 exec 命令。

所以我添加到dockerfile:

ENTRYPOINT ["python script.py -i /home/db.sqlite"]

但是当我现在运行我的容器时,它会失败并出现找不到文件或文件夹的错误python script.py

标签: docker

解决方案


我认为问题在于ENTRYPOINT语法是如何工作的。您使用 exec-form 并没有找到二进制文件(它使用整个命令行作为二进制文件的路径)。

来自https://docs.docker.com/engine/reference/builder/#entrypoint

ENTRYPOINT 有两种形式:
ENTRYPOINT ["executable", "param1", "param2"] (exec 形式,首选)
ENTRYPOINT command param1 param2 (shell 形式)

所以试试:

ENTRYPOINT ["/path/to/python", "script.py", "-i", "/home/db.sqlite"]

或者

ENTRYPOINT python script.py -i /home/db.sqlite


推荐阅读