VirtualBox中的Docker无法访问共享文件夹
主机操作系统:macOS Catalina 来宾操作系统:Ubuntu服务器20.04 嗨, 我真是抓狂。我正在文件服务器上设置Docker VM。我的主Docker服务器本机运行Ubuntu服务器。不幸的是,我需要使用一些Docker容器,它们需要文件服务器上的存储。这是2008年的Mac Pro,所以Mac版的Docker是不可能的。Docker工具箱也不起作用。因此,我只是去掉了中间人,只是手动创建了一个LinuxVM,并在其中运行Docker。现在,Docker运行良好,但容器无法写入我在VirtualBox中设置的共享文件夹 我已经安装了来宾添加。我已经让我的用户成为vboxsf组(以及docker组)的成员,因此我不必对与docker相关的所有内容都使用sudo。我可以使用nano或任何我需要的工具从虚拟机读取和写入共享文件夹,Docker本身可以在运行Docker compose up-d时创建它需要的任何目录。。。只是Docker容器无法写入。无论我是否使用sudo运行docker compose,都没有区别 现在,我正在运行Portainer、Bazarr、Radarr、Sonar、Syslog ng,当我让其他人能够写入共享文件夹时,我将运行BackupPC或UrBackup。我的大多数容器都在我的专用Docker机器上运行,但是那些需要访问大量存储的容器将在这台机器上运行 VirtualBox正在我的用户帐户下运行。文件夹的权限为755。我不明白他们为什么不能写字。有什么想法吗 谢谢 编辑8/11/20: 我改变了一些事情,在打了几个嗝后,Portainer开始工作了。然后我发现可以将docker的API设置为从远程Portainer监视,所以我删除了那个。看来Docker自己也能很好地使用它们。。。问题出在容器上。绑定映射已正确完成。但是容器无法看到这些文件夹中的内容,也无法写入这些文件夹 在这一点上,我只使用Bazarr、Radarr和Sonar,因为它们非常相似,否则我只会使用一个容器。现在它们正在运行,因为我已经将它们的/config文件夹映射到VM中的一个文件夹。但要让他们访问存储阵列,我仍然必须使用共享文件夹,而且它们似乎无法跨越两个虚拟化级别。Docker>Ubuntu服务器来宾操作系统>macOS Catalina主机操作系统 按要求编辑2: 这是我的docker-compose.yml文件。注释掉的容器是这样的,因为我试图一次处理一件事情。没有被注释掉的三个是如此相似,以至于它们可能是一个,所以我认为如果一个突然开始工作,而其他人没有,这可能会帮助我弄清楚一些事情VirtualBox中的Docker无法访问共享文件夹,docker,docker-compose,virtualbox,Docker,Docker Compose,Virtualbox,主机操作系统:macOS Catalina 来宾操作系统:Ubuntu服务器20.04 嗨, 我真是抓狂。我正在文件服务器上设置Docker VM。我的主Docker服务器本机运行Ubuntu服务器。不幸的是,我需要使用一些Docker容器,它们需要文件服务器上的存储。这是2008年的Mac Pro,所以Mac版的Docker是不可能的。Docker工具箱也不起作用。因此,我只是去掉了中间人,只是手动创建了一个LinuxVM,并在其中运行Docker。现在,Docker运行良好,但容器无法写入我
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个共享文件夹
- 备份映射到/Volumes/Backup
- 主机映射到/Users/scott
- 介质已映射到/卷/介质
#3是一个5个4TB硬盘驱动器ZFS阵列,具有一个奇偶校验驱动器,容量为16TB。此阵列与备份池之间存在差异的原因是此阵列大部分仍然为空。我已测试了您的设置,但未发现任何问题。我的设置: 安装程序 第一:在运行时使用
sudo
启动容器与否没有区别。默认情况下,Unix套接字归用户root
所有,其他用户只能使用sudo
访问它。Docker守护进程始终作为root
用户运行。资料来源:
- 主机:
- 微软视窗10企业版
- 虚拟机(使用Virtual Box 6.1.2)
- Ubuntu 20.04.1 LTS
- Docker安装
- Docker版本19.03.8,构建afacb8b7f0
- docker compose版本1.26.0,内部版本d4451659
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文件
声纳:
图片:linuxserver/sonarr
货柜名称:声纳
环境:
PUID:${PUID}
PGID:${PGID}
UMASK#U套件:022#可选
卷数:
-${HOSTDIR}/testdir:/Documents
端口:
- 8989:8989
重新启动:除非停止
.env
文件
虚拟盒的共享文件夹
我的共享文件夹映射到/media/sf_文档
developer@appdev:~$ls-l/媒体/
总数8
drwxrwx---1根vboxsf 4096 Aug 12 09:01 sf_文档
文件夹sf_Dockument包含一个由主机(Windows)创建的文件夹testdir
测试
为了进行测试,我使用
docker编写
让它跑吧。要使用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
powershelldir
invoke按预期输出文件
PS D:\UserData\***\Documents\testdir>dir
Verzeichnis:D:\UserData\***\Documents\testdir
模式LastWriteTime长度名称
---- ------------- ------ ----
d---14.08
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