Dockerfile入口点没有这样的文件或目录:找不到OCI
我有一个带有Entrypoint的Dockerfile,其中我指定了配置文件变量和可执行文件,但Docker或Entrypoint似乎无法识别它。MyDockerfile入口点没有这样的文件或目录:找不到OCI,docker,cmd,dockerfile,docker-entrypoint,Docker,Cmd,Dockerfile,Docker Entrypoint,我有一个带有Entrypoint的Dockerfile,其中我指定了配置文件变量和可执行文件,但Docker或Entrypoint似乎无法识别它。Mymain.py必须与配置文件一起执行 ENTRYPOINT ["CONFIG_FILE=path/to/config.file ./main.py"] 始终不复制此类文件或目录:未找到OCI 注意:我已经复制了当前工作目录中的所有文件main.py是一个可执行文件。因此,我想问题在于可执行文件之前附加的config变量。有人知
main.py
必须与配置文件一起执行
ENTRYPOINT ["CONFIG_FILE=path/to/config.file ./main.py"]
始终不复制此类文件或目录:未找到OCI
注意:我已经复制了当前工作目录中的所有文件main.py
是一个可执行文件。因此,我想问题在于可执行文件之前附加的config变量
。有人知道那里发生了什么吗?同样,从ENTRYPOINT
更改为CMD
也没有帮助
Dockerfile
FROM registry.fedoraproject.org/fedora:34
WORKDIR /home
COPY . /home
ENTRYPOINT ["CONFIG_FILE=path/to/config.file ./main.py"]
如果只需要将环境变量设置为静态字符串,请使用Dockerfile
ENV
指令
ENV CONFIG_FILE=/path/to/CONFIG.FILE
CMD[“/main.py”]
DockerfileENTRYPOINT
和CMD
指令(以及RUN
)有两种形式。您已经使用了JSON数组形式;在这种形式下,不涉及shell,您必须手动拆分单词。(您正在尝试运行一个命令CONFIG_FILE=../main.py
,其中可执行文件本身需要包含=
和空格。)如果不使用JSON数组表单,则可以使用shell表单,此表单应该可以工作:
CMD CONFIG_FILE=/path/to/CONFIG.FILE./main.py
一般来说,您应该更喜欢CMD
而不是ENTRYPOINT
。有一种相当标准的模式,使用ENTRYPOINT
进行首次设置,然后执行CMD
。例如,如果您希望在中绑定装入配置文件,但只想在变量存在时设置该变量,则可以编写shell脚本:
#/垃圾箱/垃圾箱
#entrypoint.sh
#
#如果配置文件存在,请将其设置为环境变量。
CONFIG_FILE=/path/to/CONFIG.FILE
如果[-f“$CONFIG_文件”];然后
导出配置文件
其他的
取消设置配置文件
fi
#运行主容器CMD。
执行官“$@”
然后,您可以指定入口点(设置环境变量)和CMD
(说明实际操作)
#入口点必须是JSON数组形式才能工作
入口点[“/”入口点.sh“]
#任何有效的CMD语法都可以
CMD[“/main.py”]
您可以通过提供备用docker run
命令来再次检查环境变量设置
#(请确保引用某些内容,以便主机shell不会首先展开它们)
docker run--rm my image sh-c'echo$CONFIG\u文件'
docker run--rm-v“$PWD:/path/到“我的图像sh-c'echo$CONFIG_文件”
如果在由docker exec启动的一次性调试shell中使用相同的环境对您很重要,那么在这些方法中,只有DockerfileENV
会使变量在那里可见。在其他情况下,环境变量仅在主容器进程及其子进程中可见,但是docker exec
进程不是主进程的子进程。您是否尝试使用ENV指令指定配置?@ssc327我做了,但可能做得不正确或其他,它仍然不起作用ENV path=path/to/config.file入口点[“config_file=${path}./main.py”]
请共享您的dockerfile@ssc327我在我的问题中添加了它。您是否尝试过registry.fedoraproject.org/fedora:34 ENV CONFIG_FILE=path/to/CONFIG.FILE WORKDIR/home COPY/home ENTRYPOINT[“/home/main.py”非常感谢您的回答。