Windows上的GitLab docker映像的卷问题

我试图在我的Windows 10上运行官方图像gitlab / gitlab-ce:docker的最新版本。
首先,我试图像下面那样运行它,它工作。

docker运行–detach \
–hostname gitlab.example.com \
– 发布443:443 – 发布8080:80 – 发布22:22 \
– 名称gitlab \
– 重新始终\
–volume / srv / gitlab / config:/ etc / gitlab \
–volume / srv / gitlab / logs:/ var / log / gitlab \
–volume / srv / gitlab / data:/ var / opt / gitlab \
gitlab / gitlab策:最新

问题在于容器的变化并没有节省。 我发现事情是在卷。 此附件仅适用于Boot2Docker VM。 好吧,我成功地在Docker设置(桌面应用程序)中共享我的磁盘C:/从主机(窗口),并testing它。 窗口的文件夹共享,我可以看到testing容器中的文件。

现在我试图像这样运行gitlab图像:

docker运行–detach \
–hostname gitlab.example.com \
– 发布443:443 – 发布8080:80 – 发布22:22 \
– 名称gitlab \
– 重新始终\
– 卷C:\ Users \ Public \ Gitlab \ config :/ etc / gitlab \
– 卷C:\ Users \ Public \ Gitlab \ logs :/ var / log / gitlab \
– volume C:\ Users \ Public \ Gitlab \ data :/ var / opt / gitlab \
gitlab / gitlab策:最新

并在容器上得到这个错误

# Logfile created on 2017-06-21 16:33:44 +0000 by logger.rb/56438 [2017-06-21T16:33:45+00:00] INFO: Started chef-zero at chefzero://localhost:8889 with repository at /opt/gitlab/embedded One version per cookbook [2017-06-21T16:33:45+00:00] INFO: Forking chef instance to converge... [2017-06-21T16:33:45+00:00] INFO: *** Chef 12.12.15 *** [2017-06-21T16:33:45+00:00] INFO: Platform: x86_64-linux [2017-06-21T16:33:45+00:00] INFO: Chef-client pid: 26 [2017-06-21T16:33:45+00:00] WARN: unable to detect ipaddress [2017-06-21T16:33:46+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found: chefzero://localhost:8889/nodes/9ca249ba6250 [2017-06-21T16:33:46+00:00] INFO: Setting the run_list to ["recipe[gitlab]"] from CLI options [2017-06-21T16:33:46+00:00] INFO: Run List is [recipe[gitlab]] [2017-06-21T16:33:46+00:00] INFO: Run List expands to [gitlab] [2017-06-21T16:33:46+00:00] INFO: Starting Chef Run for 9ca249ba6250 [2017-06-21T16:33:46+00:00] INFO: Running start handlers [2017-06-21T16:33:46+00:00] INFO: Start handlers complete. [2017-06-21T16:33:46+00:00] INFO: HTTP Request Returned 404 Not Found: Object not found: [2017-06-21T16:33:47+00:00] INFO: Loading cookbooks [gitlab@0.0.1, runit@0.14.2, package@0.0.0] [2017-06-21T16:33:47+00:00] INFO: directory[/etc/gitlab] mode changed to 775 [2017-06-21T16:33:47+00:00] WARN: Skipped selecting an init system because it looks like we are running in a container [2017-06-21T16:33:48+00:00] INFO: template[/var/opt/gitlab/.gitconfig] owner changed to 998 [2017-06-21T16:33:48+00:00] INFO: template[/var/opt/gitlab/.gitconfig] group changed to 998 [2017-06-21T16:33:48+00:00] INFO: template[/var/opt/gitlab/.gitconfig] mode changed to 644 [2017-06-21T16:33:48+00:00] INFO: Running queued delayed notifications before re-raising exception [2017-06-21T16:33:48+00:00] ERROR: Running exception handlers [2017-06-21T16:33:48+00:00] ERROR: Exception handlers complete [2017-06-21T16:33:48+00:00] FATAL: Stacktrace dumped to /opt/gitlab/embedded/cookbooks/cache/chef-stacktrace.out [2017-06-21T16:33:48+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report [2017-06-21T16:33:48+00:00] ERROR: ruby_block[directory resource: /var/opt/gitlab/git-data] (gitlab::gitlab-shell line 26) had an error: Mixlib::ShellOut::ShellCommandFailed: Failed asserting that ownership of "/var/opt/gitlab/git-data" was git ---- Begin output of set -x && [ "$(stat --printf='%U' $(readlink -f /var/opt/gitlab/git-data))" = 'git' ] ---- STDOUT: STDERR: + readlink -f /var/opt/gitlab/git-data + stat --printf=%U /var/opt/gitlab/git-data + [ root = git ] ---- End output of set -x && [ "$(stat --printf='%U' $(readlink -f /var/opt/gitlab/git-data))" = 'git' ] ---- Ran set -x && [ "$(stat --printf='%U' $(readlink -f /var/opt/gitlab/git-data))" = 'git' ] returned 1 [2017-06-21T16:33:48+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1) 

请帮忙,我做错了什么?

hyperv文件共享机制不支持unix风格的文件权限。 因此,当应用程序试图断言所有权是预期的时候遇到错误。 我猜测它试图做一个“chown”,后面跟着你的输出中描述的以下shell行:

 [ "$(stat --printf='%U' $(readlink -f /var/opt/gitlab/git-data))" = 'git' ] 

错误消息表明它期望的所有者是“混帐”,而是得到“根”。

你有两个主要的可能性。 您可以尝试配置/更改在容器内运行的进程以处理这种情况。 这可能与更改配置一样简单,以至于它期望“root”而不是“git”。 它可能最终比这更多地涉及。 你的旅费可能会改变。

您的其他选择是不使用不能正确支持unix样式权限和所有权的文件系统。 这意味着您应该切换到使用命名卷,或切换回使用Docker For Windows设置的hyperv vm中的主机卷。 无论哪种方式,您的文件将驻留在虚拟机而不是您的主机的文件系统。

我建议在这种情况下使用命名卷。 请记住,如果您重置Docker for Windows VM,则命名卷中的任何数据也将被重置。