我正在设置一个运行空间来运行Apache Airflow。我希望目录/ airflow拥有并因此可由用户Airflow写入。我的Dockerfile看起来像这样:
FROM salimfadhley/testpython:latest AS base_python
COPY . /project
WORKDIR /project/src
RUN SLUGIFY_USES_TEXT_UNIDECODE=yes python -m pip install -e /project/src
FROM base_python AS application
ENV AIRFLOW_HOME=/airflow
RUN useradd -G sudo -u 1000 airflow
VOLUME /airflow
WORKDIR /airflow
RUN chown airflow:airflow /airflow
USER airflow
不幸的是,当我尝试写入该目录时,出现错误:
airflow@fc047510b631:/airflow$ touch hello
touch: cannot touch 'hello': Permission denied
airflow@fc047510b631:/airflow$ cd ..
airflow@fc047510b631:/$ ls -l | grep airflow
drwxr-xr-x 2 root root 4096 Feb 12 13:38 airflow
drwxr-xr-x 6 airflow sudo 4096 Feb 12 13:35 project
drwxr-xr-x 4 airflow sudo 4096 Feb 12 11:12 src
有没有一种方法可以解决此问题,从而使conainer中的目录/ airflow是一个持久卷,该持久卷由用户“ airflow”拥有并可以写。
谢谢!
答案 0 :(得分:0)
使用卷源的uid / gid以及文件许可权来装入卷。如果是主机装载,则需要更改主机目录上的uid / gid和权限。如果那是命名卷,则需要修改该命名卷内的权限。
像在Dockerfile中所做的那样,通过固定映像中的权限所得到的是使 new 命名卷具有正确的权限。 Docker将使用图像中的内容(包括文件所有权和权限)初始化一个空的命名卷。但是,一旦使用内容初始化了该命名卷,则对该命名卷的进一步使用将跳过初始化步骤,您将看到以前使用的文件和权限。