docker - 在 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.py
on run 这样就不需要 exec 命令。
所以我添加到dockerfile:
ENTRYPOINT ["python script.py -i /home/db.sqlite"]
但是当我现在运行我的容器时,它会失败并出现找不到文件或文件夹的错误python script.py
解决方案
我认为问题在于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
推荐阅读
- python - “错误:算法输出超出最大可接受输出大小 16883260 > 15728640 字节”
- wso2 - WSO2, Data Source Error only with a subquery called from API
- sql-server - SQL Server:索引视图错误地验证基表中的插入
- python-3.x - 向用户发送文件,然后从服务器中删除文件
- elasticsearch - 检查某些桶值是否满足条件的 Elasticsearch 子聚合查询
- c# - 即使我的其他绑定更新,我的数据网格也不会更新
- python - AttributeError: 安装 django 时模块 'typing' 没有属性 'NoReturn'
- python - get_feature_names() 不适用于使用 sikit learn 的 CountVectorizer() 制作的稀疏矩阵
- r - 基于多个变量创建长格式数据框
- cassandra - Cassandra 使用 CQL 获取操作系统类型