docker-compose 安装卷上的 WSL 文件权限问题
WSL File permission problems on docker-compose mounted volumes
我在 WSL
环境中使用 docker-compose。我注意到 运行 docker 容器创建的一些文件显示为 user=root 和 group=root。如何更改 docker-compose 以在我当前的 UID 和 GID 下创建新文件?
我注意到在 WSL
bash shell 中,我可以作为普通用户删除 root:root 拥有的文件,而无需 sudo。相反,运行 docker 容器无法删除文件,即使该文件不属于 root。
文件位于 /mnt/c/projects-new/...
或 Windows c:\projects-new
。
/etc/wsl.conf
[network]
generateResolvConf = true
在你问之前,Linux 权限的元数据在 /etc/fstab
:
中定义
LABEL=cloudimg-rootfs / ext4 defaults 0 0
C: /mnt/c drvfs defaults,metadata 0 0
我正在使用 Win 10 20H2 (OS Buidl 19042.928) WSL Version 2
cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
我的docker-compose.yml
文件如下:
version: "3.2"
services:
ssc-file-generator-db2-test:
container_name: "ssc-file-generator-db2-test"
image: ibmcom/db2:latest
hostname: db2server
privileged: true
env_file: ["acceptance-run.environment"]
ports:
- 50100:50000
- 55100:55000
networks:
- back-tier
restart: "no"
volumes:
- setup-sql:/setup-sql
- db2-shell-scripts:/var/custom
- host-dirs:/host-dirs
- database:/database
networks:
back-tier:
external: true
volumes:
setup-sql:
driver: local
driver_opts:
o: bind
type: none
device: ./setup-sql
db2-shell-scripts:
driver: local
driver_opts:
o: bind
type: none
device: ./db2-shell-scripts
host-dirs:
driver: local
driver_opts:
o: bind
type: none
device: ./host-dirs
flyway_wait_bin:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/wait_bin
flyway_conf:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/conf
flyway_drivers:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/drivers
flyway_sql:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/sql
flyway_jars:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/jars
database:
driver: local
driver_opts:
o: bind
type: none
device: ./database
不确定这是否有效,但我没有足够的声誉来发表评论:
- 这是我在
wsl.conf
中的 automount
部分
[automount]
enabled = true
mountfstab = true
root = /mnt/
options = metadata,uid=1000,gid=1000,umask=0022,fmask=11,case=off
- 在选项中设置
uid
和 gid
。
如果这不起作用,下一步是将您的用户添加到 docker
组:
(如果您还没有,则必须使用 sudo groupadd docker
创建它)
sudo usermod -aG docker <your-user>
- 在此之后,将 docker compose 可执行文件的所有者和组更改为您的用户和组
docker
sudo chown $(whoami):docker $(which docker-compose)
我在 WSL
环境中使用 docker-compose。我注意到 运行 docker 容器创建的一些文件显示为 user=root 和 group=root。如何更改 docker-compose 以在我当前的 UID 和 GID 下创建新文件?
我注意到在 WSL
bash shell 中,我可以作为普通用户删除 root:root 拥有的文件,而无需 sudo。相反,运行 docker 容器无法删除文件,即使该文件不属于 root。
文件位于 /mnt/c/projects-new/...
或 Windows c:\projects-new
。
/etc/wsl.conf
[network]
generateResolvConf = true
在你问之前,Linux 权限的元数据在 /etc/fstab
:
LABEL=cloudimg-rootfs / ext4 defaults 0 0
C: /mnt/c drvfs defaults,metadata 0 0
我正在使用 Win 10 20H2 (OS Buidl 19042.928) WSL Version 2
cat /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal
我的docker-compose.yml
文件如下:
version: "3.2"
services:
ssc-file-generator-db2-test:
container_name: "ssc-file-generator-db2-test"
image: ibmcom/db2:latest
hostname: db2server
privileged: true
env_file: ["acceptance-run.environment"]
ports:
- 50100:50000
- 55100:55000
networks:
- back-tier
restart: "no"
volumes:
- setup-sql:/setup-sql
- db2-shell-scripts:/var/custom
- host-dirs:/host-dirs
- database:/database
networks:
back-tier:
external: true
volumes:
setup-sql:
driver: local
driver_opts:
o: bind
type: none
device: ./setup-sql
db2-shell-scripts:
driver: local
driver_opts:
o: bind
type: none
device: ./db2-shell-scripts
host-dirs:
driver: local
driver_opts:
o: bind
type: none
device: ./host-dirs
flyway_wait_bin:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/wait_bin
flyway_conf:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/conf
flyway_drivers:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/drivers
flyway_sql:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/sql
flyway_jars:
driver: local
driver_opts:
o: bind
type: none
device: ./flyway/jars
database:
driver: local
driver_opts:
o: bind
type: none
device: ./database
不确定这是否有效,但我没有足够的声誉来发表评论:
- 这是我在
wsl.conf
中的
automount
部分
[automount]
enabled = true
mountfstab = true
root = /mnt/
options = metadata,uid=1000,gid=1000,umask=0022,fmask=11,case=off
- 在选项中设置
uid
和gid
。 如果这不起作用,下一步是将您的用户添加到docker
组: (如果您还没有,则必须使用sudo groupadd docker
创建它)
sudo usermod -aG docker <your-user>
- 在此之后,将 docker compose 可执行文件的所有者和组更改为您的用户和组
docker
sudo chown $(whoami):docker $(which docker-compose)