Ser*_*kov 6 windows gitlab docker
我正在尝试在我的 Windows 10 上通过docker运行官方镜像gitlab/gitlab-ce:latest。
首先我尝试像下面一样运行它并且它工作正常。
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:latest
但问题是容器中的更改没有保存。我发现这东西是有体积的。此附加仅适用于 Boot2Docker VM。好的,我成功地从 docker 设置(桌面应用程序)中的主机(窗口)共享了我的磁盘 C:/ 并对其进行了测试。Window 的文件夹共享,我可以在测试容器中看到文件。
现在我正在尝试像这样运行 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
并在容器上出现此错误:
# 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)
Run Code Online (Sandbox Code Playgroud)
请帮忙,我做错了什么?
我想我有一个在 Windows 10 上从 Docker 运行 Gitlab 的解决方案;到目前为止,它似乎对我有用。
对于所有 Powershell,您都需要提升的提示符。
第一部分获取文件夹/卷设置,然后创建并启动 Gitlab 容器。(请记住,您必须运行 Docker Desktop 并告诉它共享 C 驱动器。)
mkdir c:\GitlabConfig
mkdir c:\GitlabConfig\backups
docker volume create gitlab-logs
docker volume create gitlab-data
docker run --detach `
--name gitlab `
--restart always `
--hostname gitlab.local `
--publish 4443:443 --publish 4480:80 --publish 8222:22 `
--volume C:\GitlabConfig:/etc/gitlab `
--volume gitlab-logs:/var/log/gitlab `
--volume gitlab-data:/var/opt/gitlab `
gitlab/gitlab-ce
Run Code Online (Sandbox Code Playgroud)
等待几分钟Gitlab完成初始化;只需在浏览器中不断刷新“localhost:4480/”,直到出现网页即可。
您现在可以按照您的计划使用 Gitlab。
编辑c:\GitlabConfig\gitlab.rb文件。找到指示的 2 个设置,取消注释,然后像这样设置它们(这就是您最终得到的结果):
gitlab_rails['manage_backup_path'] = false
gitlab_rails['backup_path'] =“/etc/gitlab/backups”
请注意,“backups”文件夹与一开始在主机上创建的文件夹相同,就像容器内的名称一样。
接下来,重新启动容器。
docker restart gitlab
Run Code Online (Sandbox Code Playgroud)
现在您可以备份 Gitlab,它将显示在 Windows 主机上
docker exec -it gitlab gitlab-rake gitlab:backup:create
Run Code Online (Sandbox Code Playgroud)
c:\GitlabConfig\backups\{prefix}_gitlab_backup.tar该过程完成后,您将在 Windows 中看到一个文件。
一旦一切准备好恢复,您就可以运行
gitlab gitlab-rake gitlab:backup:restore BACKUP={prefix}
Run Code Online (Sandbox Code Playgroud)
其中{prefix}是要用于恢复的文件名“_gitlab_backup.tar”之前的所有内容。恢复功能会在您之前在文件中配置的文件夹中查找gitlab.rb。
通过这种方法,我已经能够在 Windows 10 上设置正在运行的 Gitlab 容器。我可以使用我喜欢的任何方法备份主“c:\GitlabConfig”文件夹。
此外,您可以对容器和 2 个 docker-volumes 进行核攻击,然后仅使用该文件夹的内容从头开始。如果您通过将新容器指向您保存的配置文件夹来启动它,它将立即包含您的大部分内容。但启动完成后,您可以恢复备份,然后就回到原来的位置。目前文档表明,当 Gitlab 在容器中运行时,恢复会出现问题,但我没有任何问题。如果恢复遇到问题,它应该告诉您在重试之前需要修复什么
hyperv文件共享机制不支持unix风格的文件权限。因此,应用程序在尝试断言所有权是它所期望的所有权时会遇到错误。我猜测它会尝试执行“chown”,然后执行输出中描述的以下 shell 行:
[ "$(stat --printf='%U' $(readlink -f /var/opt/gitlab/git-data))" = 'git' ]
Run Code Online (Sandbox Code Playgroud)
错误消息表明它期望所有者是“git”,但它得到的是“root”。
你有两种主要的可能性。您可以尝试配置/更改容器内运行的进程来处理这种情况。这可能就像更改配置一样简单,以便它需要“root”而不是“git”。最终可能会涉及更多的事情。你的旅费可能会改变。
您的另一个选择是使用正确支持 UNIX 风格权限和所有权的文件系统。这意味着您应该切换到使用命名卷,或者切换回使用 Docker For Windows 设置的 hyperv 虚拟机中的主机卷。无论哪种方式,您的文件都将驻留在虚拟机中,而不是主机的文件系统中。
我建议在这种情况下使用命名卷。请记住,如果重置 Docker For Windows VM,命名卷中的所有数据也将被重置。
| 归档时间: |
|
| 查看次数: |
3914 次 |
| 最近记录: |