在 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.:我并不是在提倡这是最佳实践,但它仍然有效。
我正在尝试使用 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.:我并不是在提倡这是最佳实践,但它仍然有效。