在 docker run 中获得权限被拒绝

新手上路,请多包涵

我正在尝试使用 Dockerfile 使用 Docker。

我的Dockerfile如下,这里我使用的是debian linux系统。

 FROM debian:jessie

ENV DEBIAN_FRONTEND noninteractive

ARG AIRFLOW_VERSION=1.7.1.3
ENV AIRFLOW_HOME /usr/local/airflow

..
..

COPY script/entrypoint.sh /entrypoint.sh
COPY config/airflow.cfg ${AIRFLOW_HOME}/airflow.cfg
..
..
USER airflow
WORKDIR ${AIRFLOW_HOME}
ENTRYPOINT ["/entrypoint.sh"]

因此,当我运行 docker build -t test . 时,它的构建没有问题。

但是,当我运行 docker run -p 8080:8080 test 时。

它抛出以下错误:

 container_linux.go:247: starting container process caused "exec: \"/entrypoint.sh\": permission denied"
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/entrypoint.sh\": permission denied".

我在做什么错?

原文由 Kush Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

在调用 ENTRYPOINT 之前,您需要通过 chmod +x entrypoint.sh 更改 bash 文件的权限。因此,将您的代码更改为以下内容:

 USER airflow
WORKDIR ${AIRFLOW_HOME}
RUN chmod +x entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

重建映像并运行容器,它应该可以工作。

原文由 TheCyberliem 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于 COPY 复制文件包括它们的元数据,您还可以简单地更改主机中文件的权限(构建 Docker 映像的那个):

 $ chmod +x entrypoint.sh

然后,运行时 docker build -t test . 复制的文件将具有执行权限,并且 docker run -p 8080:8080 test 应该可以工作。

Obs.:我不提倡将此作为最佳实践,但它仍然有效。

原文由 Dinei 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题