在 docker 运行 中获得权限被拒绝

getting permission denied in docker run

我正在尝试使用 Docker 使用 Docker 文件。

我的Docker文件如下,这里我使用的是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".

我做错了什么?

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

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

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

我更改了 docker 文件夹中入口点的位置并重建,它成功了!

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

$ chmod +x entrypoint.sh

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

Obs.:我并不是在提倡这是最佳实践,但它仍然有效。