WSL中Docker-compose挂载卷的文件权限问题

8
我在WSL环境中使用docker-compose。我注意到由正在运行的Docker容器创建的一些文件显示为user=root和group=root。如何更改docker-compose以在当前UID和GID下创建新文件?
我发现在WSL bash shell中,我可以像普通用户一样删除属于root:root的文件,而无需sudo。相反,正在运行的Docker容器不能删除文件,即使该文件不是由root拥有。
这些文件位于/mnt/c/project-new/...,或在Windows中位于c:\project-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      
1个回答

5

不确定这是否有效,但我没有足够的声望来评论:

  • 以下是我在wsl.conf中的automount部分:
[automount]
enabled = true
mountfstab = true
root = /mnt/
options = metadata,uid=1000,gid=1000,umask=0022,fmask=11,case=off
  • 在选项中设置您的uidgid。 如果这不起作用,下一步是将您的用户添加到docker组中: (如果您还没有它,您将需要使用sudo groupadd docker创建它)
sudo usermod -aG docker <your-user>

在此更改docker-compose可执行文件的所有者和组为您的用户和组,以docker为例。
sudo chown $(whoami):docker $(which docker-compose) 

1
抱歉评论这么晚了,但docker-compose通常在哪里?我已经谷歌了一下,但我在/usr/local/bin~/.docker中都找不到它。提前致谢! :) - GigiSan
/usr/bin 找到了,抱歉 :) - GigiSan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接