簡體   English   中英

Docker 不以當前用戶身份掛載卷

[英]Docker does not mount volume as current user

我有一個網站,我試圖在 Docker 容器中運行。 為了避免文件權限錯誤,我更改了用戶www-data的 ID 以匹配我在主機上的用戶 ID。 此設置對我有用,但一段時間后它停止工作,我找不到原因。

FROM php:7.4-fpm

ARG HOST_UID

# Not relevant lines skipped

RUN usermod -u $HOST_UID www-data
RUN groupmod -g $HOST_UID www-data

然后我構建容器:

docker compose build --build-arg HOST_UID=$(id -u)

主機上的所有文件都屬於我的用戶:

在此處輸入圖像描述

啟動容器后,我可以看到 ID 已更改:

在此處輸入圖像描述

但是,在容器內部,它們屬於 root:

在此處輸入圖像描述

這可能是因為 docker 守護程序以 root 身份運行並安裝卷嗎?

我應該注意到這個 Dockerfile 安裝了 Supervisord(運行我的后台腳本),所以我不能用我的用戶運行整個容器——這修復了權限,但容器內不能安裝任何東西。

您應該為docker compose run使用-u標志。

這里有一個例子:

設置:

mkdir mihai
touch mihai/test.txt

docker-compose.yml

version: '3'

services:
  test:
    image: "alpine:latest"
    volumes:
      - "./mihai:/mihai"

運行正常

docker compose run test ls -l /mihai

給出 output:

total 0
-rw-r--r--    1 root     root             0 Sep 18 11:39 test.txt

以用戶身份運行:

docker compose run -u "$(id -u):$(id -g)" test ls -l /mihai

給出 output:

total 0
-rw-r--r--    1 501      dialout          0 Sep 18 11:39 test.txt

如果您在實際聲明用戶和組的地方使用自定義圖像,那么您會看到比501和 dialout 更好的dialout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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