Ubuntu Docker容器运行报/bin/sh: 1: /APP: Permission denied问题咨询
错误根因
- 核心配置错误:ENTRYPOINT指向非法目标且设置时机错误
Dockerfile指令按从上到下顺序执行,你在创建/APP目录、拷贝代码之前就设置了ENTRYPOINT /APP,执行到该指令时/APP还不存在;就算后续创建完成,/APP是目录,系统无法将目录作为可执行程序启动,直接触发权限拒绝报错。 - ENTRYPOINT格式问题导致CMD失效
你使用的是shell格式的ENTRYPOINT写法,Docker会自动用/bin/sh -c包装入口指令,此时你后续定义的CMD ["python3", "Main.py"]会被完全覆盖,不会生效。
修复方案
调整指令顺序,删除错误的ENTRYPOINT配置即可,优化后的Dockerfile参考如下:
FROM ubuntu:20.04 RUN apt update RUN apt install -y libpq-dev python3-dev python3-pip # 提前创建目标目录 RUN mkdir -p /APP/OUTPUT # 切换工作目录,简化后续路径配置 WORKDIR /APP COPY . . RUN pip3 install -r requirements.txt # 直接通过CMD指定启动命令即可 CMD ["python3", "Main.py"]
如果确实需要自定义入口脚本,需将ENTRYPOINT指向有可执行权限的二进制文件/脚本,且采用exec格式写法,示例如下:
# 假设你有自定义入口脚本entrypoint.sh COPY entrypoint.sh /APP/ # 赋予可执行权限 RUN chmod +x /APP/entrypoint.sh ENTRYPOINT ["/APP/entrypoint.sh"] CMD ["python3", "Main.py"]
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

