【发布时间】:2020-08-07 05:56:10
【问题描述】:
我正在为 docker 卷的权限而苦苦挣扎,我因写入而被拒绝访问。
这是我的 docker 文件的一小部分
FROM ubuntu:18.04
RUN apt-get update && \
apt-get install -y \
apt-transport-https \
build-essential \
ca-certificates \
curl \
vim && \............
RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - && apt-get install -y nodejs
# Add non-root user
ARG USER=user01
RUN useradd -Um -d /home/$USER -s /bin/bash $USER && \
apt install -y python3-pip && \
pip3 install qrcode[pil]
#Copy that startup.sh into the scripts folder
COPY /scripts/startup.sh /scripts/startup.sh
#Making the startup.sh executable
RUN chmod -v +x /scripts/startup.sh
#Copy node API files
COPY --chown=user1 /node_api/* /home/user1/
USER $USER
WORKDIR /home/$USER
# Expose needed ports
EXPOSE 3000
VOLUME /data_storage
ENTRYPOINT [ "/scripts/startup.sh" ]
也是我的startup.sh的一小部分
#!/bin/bash
/usr/share/lib/provision.py --enterprise-seed $ENTERPRISE_SEED > config.json
然后我的docker构建命令:
sudo docker build -t mycontainer .
还有 docker run 命令:
sudo docker run -v data_storage:/home/user01/.client -p 3008:3000 -itd mycontainer
我遇到的问题是 Python 脚本将创建文件夹:/home/user01/.client,它会在其中复制一些文件。那总是工作得很好。但现在我希望将这些文件(即数据文件)放在一个卷中用于备份文件。当我使用我的卷进行映射时,我的权限被拒绝了,所以 python 脚本不能再写了。
所以在我的 dockerfile 的末尾,这个指令与 docker run 命令中的映射相结合,给了我被拒绝的权限:
VOLUME /data_storage
关于如何解决此问题的任何建议? “user01”需要更多权限吗? 谢谢
【问题讨论】:
-
你在 Windows 上吗?
-
在 linux VM ubuntu 中工作
-
您的系统中是否创建了目录?
-
如果您安装在本地卷中,它将使用与主机系统上相同的数字 UID 和 GID 来获得文件系统权限。问题可能是您的
user01用户没有使用对本地安装的卷具有写入权限的 UID / GID。尝试在您的 dockerfile 中使用显式 GID 创建一个组,然后授予本地目录对该 GID 的写入权限。 -
@Grzegorz Pudłowski:我在 dockerfile "VOLUME /data_storage" 中创建卷,然后在我的 docker 文件中进行映射。我没有在本地创建任何文件
标签: docker dockerfile docker-volume docker-container docker-image