首页 文章

Windows上GitLab docker镜像的卷问题

提问于
浏览
4

我正试图在我的Windows 10上运行docker的官方图像 gitlab/gitlab-ce:latest .
First 我尝试像下面那样运行它并且它有效 .

docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 8080:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume / srv / gitlab / config:/ etc / gitlab \ --volume / srv / gitlab / logs:/ var / log / gitlab \ --volume / srv / gitlab / data:/ var / opt / gitlab \ gitlab / gitlab-ce:最新

但是容器中更改的 problem was 没有保存 . 我发现事情已经完成了 . 此附件仅适用于Boot2Docker VM . 好的,我成功地在docker设置(桌面应用程序)中从主机(Window)共享了我的磁盘C:/并进行了测试 . Window的文件夹共享,我可以看到测试容器中的文件 .

Now 我正在尝试像这样运行gitlab图像:

docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 8080:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume C: \ Users \ Public \ Gitlab \ config:/ etc / gitlab \ --volume C:\ Users \ Public \ Gitlab \ logs:/ var / log / gitlab \ --volume C:\ Users \ Public \ Gitlab \ data:/ var / opt / gitlab \ gitlab / gitlab-ce:latest

在容器上得到 this error

# 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)

请帮忙,我做错了什么?

1 回答

  • 2

    hyperv文件共享机制不支持unix样式文件权限 . 因此,当应用程序尝试断言所有权符合预期时,会遇到错误 . 我猜它会尝试执行'chown',然后是输出中描述的以下shell行:

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

    错误消息表明它期望所有者是'git',但它变为'root' .

    你有两个主要的可能性 . 您可以尝试配置/更改容器内运行的进程以处理这种情况 . 这可能就像更改配置一样简单,因此它需要'root'而不是'git' . 它最终可能会涉及更多 . 你的旅费可能会改变 .

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

    我建议在这种情况下使用命名卷 . 请记住,如果重置Docker For Windows VM,则指定卷中的所有数据也将被重置 .

相关问题