我在 Synology NAS 上运行的 Docker 容器中有一个 GitLab 实例。现在,我想将 GitLab 移动到我拥有的 Windows PC 上,但通过共享文件夹并将其设为 Docker 卷,将数据保留在 NAS 上。为了测试它,我在 NAS 上创建了一些文件夹config
、data
和,logs
并使用“共享文件夹”在网络上共享它们。据我所知,我们已将其配置为使用 SMB 来实现这一点。然后,在 Windows 机器上,我运行(基于此建议)
docker volume create --driver local
--opt type=cifs
--opt device=//192.168.1.150/gitlab_docker_volume/config
--opt o=user=gitlab_docker_volume,password=<password> gitlab-config
另外两个是创建gitlab-data
和gitlab-logs
。
然后,我使用以下命令启动容器
docker run -d -p 8070:80 -p 8433:443 -p 8012:22
-v gitlab-logs:/var/log/gitlab:rw
-v gitlab-data:/var/opt/gitlab:rw
-v gitlab-config:/etc/gitlab:rw gitlab/gitlab-ce
并因错误而崩溃
...
Mixlib::ShellOut::ShellCommandFailed:
Failed asserting that ownership of "/var/opt/gitlab/git-data" was git:git
...
2024-12-13 13:54:47 + [ root:root = git:git ]
当我查看 NAS 上的文件夹时,我可以看到容器成功创建了 GitLab 所需的所有文件和文件夹,但它们都有所有者gitlab_docker_volume:users
和777
权限。在data
NAS 上运行的原始 GitLab 容器的卷中,该git-data
文件夹属于某个神秘用户998
,并且具有2770
权限。
如果我理解正确的话,发生的情况是 GitLab 容器尝试访问chown
该git-data
文件夹,并且该命令必须映射到 SMB/CIFS 共享,但事实并非如此。
有两篇帖子提到了相同的错误,但是它们在使用不同的卷设置时遇到了该问题 - 其中一个似乎是由于在虚拟机中运行 Windows 服务器而出现问题,另一个则使用 Windows 原生文件夹。
https://stackoverflow.com/questions/44684621/volume-trouble-with-gitlab-docker-image-on-windows
我还尝试找出如何通过网络共享来编辑 Linux 权限,但搜索结果充斥着“如何在创建文件夹时设置权限,以便 Docker 容器可以首先编辑它们”——这在我的设置中已经起作用了。
另一方面,我有原本位于 Linux 计算机上的共享文件夹。我能否通过某种方式更改文件夹共享设置、卷设置或其他任何内容,以便容器可以更改文件的用户和权限?顺便说一下,Docker 正在使用 WSL 后端运行。
我设法通过使用 NFS 而不是 SMB 共享文件夹来使其正常工作。
使用这些说明。简而言之,
docker volume
命令现在是通过 GUI 在 NAS 上启用 NFS 非常明显。我没有时间研究如何让 Kerberos 安全工作,我想这很麻烦但可行。目前,这对于我的目的来说已经足够了。