更改完成后,GitLab泊坞窗图像不会从gitlab.rb重新配置某些参数

时间:2017-07-26 18:27:52

标签: docker gitlab

环境

  • 主机系统:Ubuntu 16.04 LTS
  • 主机上的Apache 2.24 w /反向代理到容器

    $ sudo docker version
    Client:
     Version:      17.06.0-ce
     API version:  1.30
     Go version:   go1.8.3
     Git commit:   02c1d87
     Built:        Fri Jun 23 21:23:31 2017
     OS/Arch:      linux/amd64
    
    Server:
     Version:      17.06.0-ce
     API version:  1.30 (minimum version 1.12)
     Go version:   go1.8.3
     Git commit:   02c1d87
     Built:        Fri Jun 23 21:19:04 2017
     OS/Arch:      linux/amd64
     Experimental: false
    
    $ sudo docker info
    Containers: 1
     Running: 1
     Paused: 0
     Stopped: 0
    Images: 3
    Server Version: 17.06.0-ce
    Storage Driver: aufs
     Root Dir: /var/lib/docker/aufs
     Backing Filesystem: extfs
     Dirs: 30
     Dirperm1 Supported: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins:
     Volume: local
     Network: bridge host macvlan null overlay
     Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog
    Swarm: inactive
    Runtimes: runc
    Default Runtime: runc
    Init Binary: docker-init
    containerd version: cfb82a876ecc11b5ca0977d1733adbe58599088a
    runc version: 2d41c047c83e09a6d61d464906feb2a2f3c52aa4
    init version: 949e6fa
    Security Options:
     apparmor
     seccomp
      Profile: default
    Kernel Version: 4.4.0-47-generic
    Operating System: Ubuntu 16.04.2 LTS
    OSType: linux
    Architecture: x86_64
    CPUs: 4
    Total Memory: 15.67GiB
    Name: <masked>
    ID: CWMI:WONN:2RZP:5HFD:GN52:BO3S:GNNW:P6WJ:5MQJ:PQLG:ZTWR:4JHM
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): false
    Registry: https://index.docker.io/v1/
    Experimental: false
    Insecure Registries:
     127.0.0.0/8
    Live Restore Enabled: false
    

问题

我已经拆掉并在上周重建了这台服务器很多次,以便在我的特定设置中运行各种其他项目。看起来当我第一次构建服务器时,它保存了很多我的配置,但现在不允许我更改它。

以下是我gitlab.rb的SMTP /电子邮件部分(我的实际fqdn替换为&#34; mydomain.com&#34;:

### Email Settings
# gitlab_rails['gitlab_email_enabled'] = true
# gitlab_rails['gitlab_email_from'] = 'gitlab@mydomain.com'
# gitlab_rails['gitlab_email_display_name'] = 'GitLab'
# gitlab_rails['gitlab_email_reply_to'] = 'noreply@mydomain.com'
# gitlab_rails['gitlab_email_subject_suffix'] = ''

### GitLab email server settings
###! Docs: https://docs.gitlab.com/omnibus/settings/smtp.html
###! **Use smtp instead of sendmail/postfix.**

# gitlab_rails['smtp_enable'] = true
# gitlab_rails['smtp_address'] = "mysmtp"
# gitlab_rails['smtp_port'] = 587
# gitlab_rails['smtp_user_name'] = "<username>"
# gitlab_rails['smtp_password'] = "<pass>"
# gitlab_rails['smtp_domain'] = "mysmtp"
# gitlab_rails['smtp_authentication'] = "plain"
# gitlab_rails['smtp_enable_starttls_auto'] = true
# gitlab_rails['smtp_tls'] = true

###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert'**
###! Docs: http://api.rubyonrails.org/classes/ActionMailer/Base.html
# gitlab_rails['smtp_openssl_verify_mode'] = 'none'

# gitlab_rails['smtp_ca_path'] = "/etc/ssl/certs"
# gitlab_rails['smtp_ca_file'] = "/etc/ssl/certs/ca-certificates.crt"

根据GitLab的SMTP文档中的信息,我应该能够通过ruby控制台测试发送邮件,如下所示:

gitlab-rails console
irb(main):007:0> Notify.test_email('adam@adamwgay.com', 'Message Subject', 'Message Body').deliver_now

但是,控制台的输出是意外的。我gitlab.rb的所有设置都不存在,而且似乎使用了一些默认选项(包括尝试使用sendmail,它会在开头时向右发出错误)。

irb(main):007:0> Notify.test_email('adam@adamwgay.com', 'Message Subject', 'Message Body').deliver_now

Notify#test_email: processed outbound mail in 1.2ms
sh: 1: /usr/sbin/sendmail: not found

Sent mail to adam@adamwgay.com (5.8ms)
Date: Tue, 25 Jul 2017 19:16:15 +0000
From: GitLab <gitlab@gitlab.mydomain.com>
Reply-To: GitLab <noreply@gitlab.mydomain.com>
To: adam@adamwgay.com
Message-ID: <597798ff6423a_9593fdebe2c710863b8@gitlab.mydomain.com>
Subject: Message Subject
Mime-Version: 1.0
Content-Type: text/html;
 charset=UTF-8
Content-Transfer-Encoding: 7bit
Auto-Submitted: auto-generated
X-Auto-Response-Suppress: All

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p>Message Body</p></body></html>

=> #<Mail::Message:70225704413280, Multipart: false, Headers: <Date: Tue, 25 Jul 2017 19:16:15 +0000>, <From: GitLab <gitlab@gitlab.mydomain.com>>, <Reply-To: GitLab <noreply@gitlab.mydomain.com>>, <To: adam@adamwgay.com>, <Message-ID: <597798ff6423a_9593fdebe2c710863b8@gitlab.mydomain.com.mail>>, <Subject: Message Subject>, <Mime-Version: 1.0>, <Content-Type: text/html; charset=UTF-8>, <Content-Transfer-Encoding: 7bit>, <Auto-Submitted: auto-generated>, <X-Auto-Response-Suppress: All>>

我在这个输出中看到了一些问题,有些事情告诉我gitlab.rb中的SMTP设置没有正确解析/传递给GitLab系统:

  • 此输出中的所有FromReply-To字段与我在gitlab.rb中设置的字段不匹配
  • 此行sh: 1: /usr/sbin/sendmail: not found似乎表明系统仍在尝试使用sendmail。同样,不是我在gitlab.rb
  • 中设置的内容

进一步看,似乎我的gitlab.rb文件中没有任何内容在运行gitlab-ctl reconfigure然后重新启动容器时被更新。

  • 如果我直接更改设置(即使我的主机上有卷),请说nginx配置文件,然后重启始终会恢复设置,不管我在gitlab.rb文件中设置了什么。
  • 如果我添加一个文件尝试强制容器上的SMTP设置,则再次重新启动会删除此文件。

是否有另一种方法可以将gitlab.rb的设置应用到我错过的容器中?

我的操作顺序:

  1. gitlab.rb
  2. 中进行更改
  3. 在容器
  4. 中运行sudo docker exec gitlab gitlab-ctl reconfigure或仅gitlab-ctl reconfigure
  5. 在容器内运行sudo docker restart gitlabgitlab-ctl restart
  6. 即使两种方式都给我一个成功的重新配置消息,但设置不会改变。在某些时候,我对gitlab.rb所做的更改已存储到容器中,因为每次重建它时,某些主机名和设置都会保持不变,并且我的实例会很快返回所有必需的证书和HTTPS参数。我似乎无法通过配置文件对我的gitlab容器进行任何进一步的更改。

    这里是我如何构建容器,也许这是问题的一部分?我错过了一些简单的东西吗?

    sudo docker run --detach \
       --hostname gitlab.mydomain.com \
       --publish 10443:443 --publish 10080:80 --publish 10022:22 --publish 10587:587 --publish 10025:25 \
       --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
    

    更新1

    如果我在容器中运行gitlab-ctl diff-config,它似乎告诉我确实存在另一个gitlab.rb,它正在从/etc/gitlab/目录中取出它在容器内。它甚至会向我显示配置中的值与我在&#34;包可用配置中看到的错误值相比较。&#34;

    更新2

    走下去,认为这可能是一个权限问题。我不确定主机系统上存在的任何持久卷的建议所有权究竟是什么。每次重新启动容器时,我最终都会被root:root拥有。即使我使root:docker拥有的文件夹,然后重新配置/重置,它也会恢复为root:root。不知道权限是否是问题,只是发布更新以供参考,以防它帮助我追踪问题。

    更新3

    好的,发现了一个非常迂回的方式来纠缠我的问题。同样,我认为这只是一个绑带,而我的gitlab.rb应该为我处理这个重新配置,我必须在有空的时候跟踪它。

    bandaid的要点:我在我需要编辑的容器文件系统上单独编辑了每个.yml和.rb文件(现在只有2个),并按照以下方式编写了我的服务器重建脚本。我不得不执行gitlab-ctl restart命令,因为重新启动整个容器会再次覆盖这两个文件。

    sudo docker run --detach \
        --hostname gitlab.mydomain.com \
        --publish 10443:443 --publish 10080:80 --publish 10022:22 --publish 10587:587 \
        --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
    sudo docker exec gitlab cp /etc/gitlab/gitlab.yml /var/opt/gitlab/gitlab-rails/etc/gitlab.yml
    sudo docker exec gitlab cp /etc/gitlab/smtp_settings.rb /opt/gitlab/embedded/service/gitlab-rails/config/initializers/smtp_settings.rb
    sudo docker exec gitlab gitlab-ctl restart
    

    更新4(tldr;)

    我将配置文件和所有参数注释掉了......从我需要的内容中移除了单个#,现在一切都很顺利。

1 个答案:

答案 0 :(得分:0)

正如@jdno指出的那样,我将配置文件参数注释掉了。