[英]I want a Docker non-root user to be able to write to a persistent volume? How can I fix this?
[英]docker can not write on mounted volume with non-root user
我有 Dockerfile 和 myuser 來自 nginx 圖像,我想在安裝位置安裝日志,我正在使用 docker-compose 啟動容器。 我的要求是僅使用非 root 用戶而不使用 sudo。
RUN addgroup mygroup
RUN adduser myuser --disabled-password
USER myuser
version: "2"
services:
nginx:
container_name: nginx
image: mynginx:v1
ports:
- "8888:80"
volumes:
- ./log/nginx:/var/log/nginx
盡管目錄已掛載,但在主機上看不到 nginx 日志文件 access.log 和 error.log。
Docker 日志如下:
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (13: Permission denied)
2021/04/09 12:46:08 [warn] 1#1: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
2021/04/09 12:46:08 [emerg] 1#1: mkdir() "/var/cache/nginx/client_temp" failed (13: Permission denied)
但是,如果我對以 root 用戶身份運行的官方 nginx 映像執行相同操作,則一切正常。
version: "2"
services:
nginx:
container_name: nginx
image: nginx
ports:
- "8888:80"
volumes:
- ./log/nginx:/var/log/nginx
試圖查看各種選項,但到目前為止沒有運氣。
最可能的是,您主機上myuser
的 UID 與容器內myuser
的 UID 不匹配。
如果要從容器中寫入主機目錄,則必須首先在主機上創建一個myuser
用戶並通過以下方式檢查其 UID
$ sudo su - myuser -c "id"
uid=1000(myuser) gid=100(users) Gruppen=100(users)
在此示例中,UID=1000 和 GID=100。
現在,您需要在主機上創建一個文件夾~/log/nginx
,其中包含myuser
的所有者/組。
$ sudo mkdir ~/log/nginx
$ sudo chown myuser ~/log/nginx
$ sudo chmod -R 0700 ~/log/nginx/
之后,您可以使用相同的 UID/GID 創建 Dockerfile 和您的用戶。
RUN useradd myuser -u 1000 -g 100 -m -s /bin/bash
USER myuser
現在您應該能夠使用指定的用戶寫入已安裝的卷。 您可以通過以下方式檢查:
docker run -v $(pwd)/log/nginx:/var/log/nginx --rm -it mynginx:v1 /bin/bash
如果您現在可以寫入/var/log/nginx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.