Environment
- Host System: Ubuntu 16.04 LTS
- Apache 2.24 on host w/ reverse proxy to the container
$ 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
Issue
I have torn down and rebuilt this server so many times in the last week getting various other items to function in my particular setup. It seems like when I first built the server, it saved a lot of my configuration but now does not allow me to change it.
Here is the SMTP/Email portion of my gitlab.rb (with my actual fqdn replaced by “mydomain.com”:
### 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"
Based on the information from GitLab’s SMTP documentation, I should be able to test sending mail via the ruby console like this:
gitlab-rails console
irb(main):007:0> Notify.test_email('adam@adamwgay.com', 'Message Subject', 'Message Body').deliver_now
However, the output from the console is unexpected. None of my settings from gitlab.rb are present, and it seems to be using some default set of options (including attempting to use sendmail, which it spits up an error about right at the beginning).
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>>
There are a couple of issues that I see with this output, and something tells me that the SMTP settings from gitlab.rb are not being parsed/delivered to the GitLab system properly:
- All the
FromandReply-Tofields in this output DO NOT match what I have set ingitlab.rb - This line,
sh: 1: /usr/sbin/sendmail: not found, seems to indicate the system is still trying to use sendmail. Again, not what I have set ingitlab.rb
Looking further, It seems that nothing in my gitlab.rb file is being updated upon running gitlab-ctl reconfigure then restarting the container.
- If I change settings directly (even if there’s a volume on my host), say the nginx conf files, then a restart always reverts the settings, despite what I have set in the
gitlab.rbfile. - If I add a file to try and force the SMTP settings on the container, then again a restart removes this file.
Is there another way to apply the settings from gitlab.rb to the container that I have missed?
My order of ops:
- Make my changes in
gitlab.rb - Run
sudo docker exec gitlab gitlab-ctl reconfigureor justgitlab-ctl reconfigureinside the container - Run
sudo docker restart gitlaborgitlab-ctl restartinside the container
Even though both ways give me a successful reconfigure message, the settings are not changed. At some point, changes I made to gitlab.rb got stored into the container, as every time I rebuild it certain hostnames and settings are unchanged, and my instance returns fairly quickly with all the necessary parameters for certs and HTTPS. I just can’t seem to make any further changes to my gitlab container via the config files.
Here’s how I build the container, maybe this is part of the issue? Am I missing something simple?
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
UPDATE 1
If I run gitlab-ctl diff-config in the container, it seems to tell me that there is indeed another gitlab.rb that it is pulling from, and that it is not pulling from mine in the /etc/gitlab/ directory within the container. It even shows me the values from my config compared to the incorrect values I see in the “package available config.”
UPDATE 2
Went down the path thinking this may be a permissions issue. I’m not sure exactly what the suggested ownership should be for any persistent volumes that live on the host system. Mine end up owned by root:root every time I restart the container. Even if I make the folders owned by root:docker, then reconfigure/reset, it reverts back to being root:root. No idea if permissions is the issue, but just posting the update for information purposes in case it helps me track down the issue.
UPDATE 3
Ok, found a really roundabout way to bandaid my issue. Again, I think this is just a bandaid and that my gitlab.rb should be handling this re-config for me, I’ll have to track that down when I have the time.
The gist of the bandaid: I edited each .yml and .rb file individually on the container file system that I needed to edit (just 2 for now), and have made my server rebuild script as follows. I had to do the gitlab-ctl restart command, as restarting the whole container overwrites these two files again.
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
UPDATE 4 (tldr;)
I had my config files and all parameters commented out… removed the single # from what I needed and now all is well.