簡體   English   中英

docker 無法使用非 root 用戶寫入已安裝的卷

[英]docker can not write on mounted volume with non-root user

我有 Dockerfile 和 myuser 來自 nginx 圖像,我想在安裝位置安裝日志,我正在使用 docker-compose 啟動容器。 我的要求是僅使用非 root 用戶而不使用 sudo。

我的 dockerfile 和 myuser,我創建的圖像標簽是 mynginx:v1

RUN addgroup mygroup
RUN adduser myuser --disabled-password
USER myuser

非工作 docker 使用 myuser 與 mynginx 映像組合

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 映像執行相同操作,則一切正常。

使用 root 用戶使用官方 nginx 映像工作 docker 組成

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM