主机操作系统:macOS Catalina 来宾操作系统:Ubuntu Server 20.04
嗨, 我真的在这里挠头。我正在文件服务器上设置Docker VM。我的主要Docker服务器本机运行Ubuntu Server。不幸的是,有一些我需要使用的Docker容器需要存储在文件服务器上。这是2008年的Mac Pro,因此无法使用Mac版Docker。 Docker Toolbox也不起作用。因此,我删除了中间人,并手动创建了一个Linux VM,并在其中运行Docker。现在,Docker运行良好,但是容器无法写入我在VirtualBox中设置的共享文件夹。
我已经安装了Guest Additions。我已经使用户成为vboxsf组(以及docker组)的成员,因此我不必在所有与Docker相关的事情上都使用sudo。我可以使用nano或所需的任何工具在VM机器上读写共享文件夹,并且Docker本身可以在运行docker-compose up -d ...时创建所需的任何目录,而Docker容器可以不写。无论我是否使用sudo运行docker-compose,都没有区别。
现在,我正在运行Portainer,Bazarr,Radarr,Sonarr,Syslog-ng,一旦我让其余的人能够写到共享文件夹,我就将运行BackupPC或UrBackup。我的大多数容器都在我专用的Docker计算机上运行,但是那些需要访问大量存储的容器将位于该计算机上。
VirtualBox正在我的用户帐户下运行。文件夹的权限为755。我无法弄清为什么它们不能写。有什么想法吗?
谢谢
编辑8/11/20: 经过几次打started之后,Poortainer我做了些改动。然后我发现您可以将Docker的API设置为从远程Portainer进行监视,因此我删除了该API。似乎Docker本身可以很好地使用它们……这是有问题的容器。绑定映射正确完成。但是容器无法看到这些文件夹中的内容,也无法对其进行写入。
在这一点上,我仅与Bazarr,Radarr和Sonarr合作,因为它们是如此相似,否则我将只使用一个容器。它们已经在运行,因为我已将其/ config文件夹映射到VM中的文件夹。但是对于他们访问存储阵列而言,我仍然必须使用共享文件夹,并且它们似乎无法跨越2个虚拟化级别。 Docker> Ubuntu Server来宾操作系统> macOS Catalina主机操作系统。
根据要求编辑2: 这是我的docker-compose.yml文件。注释掉的容器就是这种方式,因为我试图一次处理一件事情。没有被注释掉的三个非常相似,以至于它们可能是一个,因此认为如果一个突然开始工作而其他人没有开始工作,这也许可以帮助我弄清楚一些事情。
version: "3.7"
networks:
docker:
name: DockerBridge
driver: bridge
services:
############################# NetData
# netdata:
# image: netdata/netdata
# container_name: NetData
# hostname: azeroth.local
# ports:
# - 19999:19999
# environment:
# PUID: ${PUID}
# PGID: ${PGID}
# TZ: ${TZ}
# DOCKER_HOST: proxy:2375
# restart: unless-stopped
# cap_add:
# - SYS_PTRACE
# security_opt:
# - apparmor:unconfined
# volumes:
# - /etc/passwd:/host/etc/passwd:ro
# - /etc/group:/host/etc/group:ro
# - /proc:/host/proc:ro
# - /sys:/host/sys:ro
# - /etc/os-release:/host/etc/os-release:ro
# - ${USERDIR}/netdata/lib:/var/lib/netdata
# - ${USERDIR}/netdata/cache:/var/cache/netdata
# - ${USERDIR}/netdata/config:/etc/netdata
# - ${USERDIR}/nginx/letsencrypt/live:/ssl:ro
# network_mode: bridge
# depends_on:
# - proxy
# proxy:
# image: tecnativa/docker-socket-proxy
# container_name: DockerProxy
# environment:
# PUID: ${PUID}
# PGID: ${PGID}
# TZ: ${TZ}
# CONTAINERS: 1
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock:ro
# network_mode: bridge
############################# Bazarr
bazarr:
image: linuxserver/bazarr
container_name: Bazarr
environment:
PUID: ${PUID}
PGID: ${PGID}
TZ: ${TZ}
UMASK_SET: 022 #optional
volumes:
- ${USERDIR}/Docker/Bazarr:/config
- ${MEDIADIR}/Movies:/movies
- ${MEDIADIR}/TV\ Shows:/tv
ports:
- 6767:6767
restart: unless-stopped
networks:
- docker
############################# Radarr
radarr:
image: linuxserver/radarr
container_name: Radarr
environment:
PUID: ${PUID}
PGID: ${PGID}
TZ: ${TZ}
UMASK_SET: 022 #optional
volumes:
- ${USERDIR}/Docker/Radarr:/config
- ${MEDIADIR}/Movies:/movies
- ${MEDIADIR}/Downloads:/downloads
ports:
- 7878:7878
restart: unless-stopped
networks:
- docker
############################# Sonarr
sonarr:
image: linuxserver/sonarr
container_name: Sonarr
environment:
PUID: ${PUID}
PGID: ${PGID}
TZ: ${TZ}
UMASK_SET: 022 #optional
volumes:
- ${USERDIR}/Docker/Sonarr:/config
- ${MEDIADIR}/TV\ Shows:/tv
- ${MEDIADIR}/Downloads:/downloads
ports:
- 8989:8989
restart: unless-stopped
networks:
- docker
############################# syslog-ng
# syslog-ng:
# image: balabit/syslog-ng:latest
# container_name: Syslog-ng
# ports:
# - 514:514/udp
# - 601:601/tcp
# - 6514:6514/tcp
# environment:
# PUID: ${PUID}
# PGID: ${PGID}
# TZ: ${TZ}
# volumes:
# - ${HOSTDIR}/Docker/Syslog-ng/syslog-ng.conf:/etc/syslog-ng/syslog-ng.conf
# - ${HOSTDIR}/Docker/Syslog-ng/logs:/var/log
# restart: always
# networks:
# - docker
这是.env文件,其中部分内容已被编辑:
PUID=1000
PGID=1000
TZ=America/New_York
USERDIR=/home/scott/Docker
BACKUPDIR=/media/sf_Backup
HOSTDIR=/media/sf_Host
MEDIADIR=/media/sf_Media
DOMAIN=xxxxxxxx.us
EMAIL=xxxxxxxx@xxxxx.com
VirtualBox具有3个共享文件夹。
#1将用于容器化BackupPC,一旦我能完成其余所有工作,并将成为我所有计算机的备份。因此,它尚未使用。
#2来自较早的设置,其中我的/ config目录也映射到了共享文件夹。我意识到我不需要,但是还没有删除VirtualBox中的共享文件夹。
#1是外部eSata ZFS池。目前,一个带有池的6TB驱动器已设置,可以根据需要轻松添加更多驱动器。
#2映射到主SSD上的我的macOS主文件夹。
#3是一个5TB 4TB硬盘ZFS阵列,具有一个奇偶校验驱动器,容量为16TB。此备份池与备份池之间存在差异的原因是该阵列仍然大部分为空。
答案 0 :(得分:0)
我已经测试了您的设置,但是找不到任何问题。我的设置:
第一:是否使用sudo
启动容器,在运行时没有区别。默认情况下,Unix套接字由用户root
拥有,其他用户只能使用sudo
访问它。Docker守护程序始终以root
用户身份运行。来源:here
我正在调用包含以下内容的文件夹
developer@appdev:~/tmp$ ls -l
total 16
drwxrwxr-x 2 developer developer 4096 Aug 14 08:59 .
drwxrwx--- 11 developer developer 4096 Jul 29 09:50 ..
-rw-rw-r-- 1 developer developer 261 Aug 14 08:23 docker-compose.yaml
-rw-rw-r-- 1 developer developer 111 Aug 14 08:17 .env
docker-compose.yaml
文件sonarr:
image: linuxserver/sonarr
container_name: Sonarr
environment:
PUID: ${PUID}
PGID: ${PGID}
UMASK_SET: 022 #optional
volumes:
- ${HOSTDIR}/testdir:/Documents
ports:
- 8989:8989
restart: unless-stopped
.env
文件PUID=1000
PGID=1000
TZ=America/New_York
HOSTDIR=/media/sf_Documents
DOMAIN=xxxxxxxx.us
EMAIL=xxxxxxxx@xxxxx.com
我的共享文件夹已映射到 / media / sf_Documents
developer@appdev:~$ ls -l /media/
total 8
drwxrwx--- 1 root vboxsf 4096 Aug 12 09:01 sf_Documents
文件夹 sf_Dockument 包含由主机(Windows)创建的文件夹testdir
为了进行测试,我使用
标记了docker-filedocker-compose up
并使其运行。要使用bash交互地输入容器,请执行以下操作:
docker exec -it Sonarr bash
尝试使用cd Documents/
,touch test
和mkdir mytestdir
添加文件。 ls -l
输出以下
total 4
drwxrwx--- 1 root 998 0 Aug 14 07:08 .
drwxr-xr-x 1 root root 4096 Aug 14 06:23 ..
drwxrwx--- 1 root 998 0 Aug 14 07:08 mytestdir
-rwxrwx--- 1 root 998 0 Aug 14 06:24 test
powershell dir
调用将按预期输出文件。
PS D:\UserData\***\Documents\testdir> dir
Verzeichnis: D:\UserData\***\Documents\testdir
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 14.08.2020 09:08 mytestdir
-a---- 14.08.2020 08:24 0 test
由于我无法重现您的问题,因此我想给您一些建议,我将尝试:
由于我不使用Mac OS作为主机系统,因此无法进行验证。主机可能存在权限问题。