From 5a091edee6291bc379bcea941c5320f182fe73f1 Mon Sep 17 00:00:00 2001 From: Thomas Boutry Date: Mon, 9 Jan 2017 08:40:56 -0500 Subject: [PATCH 1/5] First setup for systemd startup script --- systemd/dockerDDNS | 12 ++++++++++++ systemd/dockerDDNS.service | 13 +++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 systemd/dockerDDNS create mode 100644 systemd/dockerDDNS.service diff --git a/systemd/dockerDDNS b/systemd/dockerDDNS new file mode 100644 index 0000000..f6f1dd2 --- /dev/null +++ b/systemd/dockerDDNS @@ -0,0 +1,12 @@ +# Configuration file for the DockerDDNS service +# REF : https://github.com/ggtools/docker-tools + +# DNS key to update bind9 server +DDNS_UPDATE_KEY=/etc/bind/keys/Kdck.example.com.+157+31514.private + +# domain to update +DOMAIN=dck.example.com. + +# DNS server +DNS_SERVER=127.0.0.1 + diff --git a/systemd/dockerDDNS.service b/systemd/dockerDDNS.service new file mode 100644 index 0000000..28ec154 --- /dev/null +++ b/systemd/dockerDDNS.service @@ -0,0 +1,13 @@ +[Unit] +Description=Update a dynamic DNS when Docker starts containers +After=docker.service +Requires=docker.service + +[Service] +EnvironmentFile=/etc/conf.d/dockerDDNS +ExecStart=/usr/local/sbin/dockerDDNS.py --key $DDNS_UPDATE_KEY --domain $DOMAIN --server $DNS_SERVER --catchup +PIDFile=/var/run/dockerDDNS +KillMode=process + +[Install] +WantedBy=default.target From 5d0d961c58139557209b7190f27933fcd4376cf8 Mon Sep 17 00:00:00 2001 From: Thomas Boutry Date: Mon, 9 Jan 2017 08:47:12 -0500 Subject: [PATCH 2/5] Add documentation but, but not finish --- systemd/README.mkd | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 systemd/README.mkd diff --git a/systemd/README.mkd b/systemd/README.mkd new file mode 100644 index 0000000..7436952 --- /dev/null +++ b/systemd/README.mkd @@ -0,0 +1,14 @@ + +# Install + +This configuration was tested on ArchLinux, for RedHat/CentOS or Ubuntu you need change path + +1. copy dockerDDNS.py into /usr/local/sbin/ +2. Change permission to let root execute file (chmod 766 /usr/local/sbin/dockerDDNS.py) +2. copy dockerDDNS.service into /etc/systemd/system +3. finaly copy dockerDDNS into /etc/conf.d/ +4. Edit file /etc/conf.d/dockerDDNS , fix Variables for your needs +5. reload systemd configuration file (sudo systemctl daemon-reload) + +Installation complet, It's time to TRY :D + From cf6175f4a611d71d3560857bf549a039e01bb904 Mon Sep 17 00:00:00 2001 From: Thomas Boutry Date: Mon, 9 Jan 2017 16:46:37 -0500 Subject: [PATCH 3/5] Add documentation to enable dockerDDNS in systemd for ArchLinux and Ubuntu --- systemd/README.mkd | 14 -------- systemd/Ubuntu/README.mkd | 37 ++++++++++++++++++++++ systemd/{ => Ubuntu}/dockerDDNS | 0 systemd/Ubuntu/dockerDDNS.service | 13 ++++++++ systemd/archLinux/README.mkd | 37 ++++++++++++++++++++++ systemd/archLinux/dockerDDNS | 12 +++++++ systemd/{ => archLinux}/dockerDDNS.service | 0 7 files changed, 99 insertions(+), 14 deletions(-) delete mode 100644 systemd/README.mkd create mode 100644 systemd/Ubuntu/README.mkd rename systemd/{ => Ubuntu}/dockerDDNS (100%) create mode 100644 systemd/Ubuntu/dockerDDNS.service create mode 100644 systemd/archLinux/README.mkd create mode 100644 systemd/archLinux/dockerDDNS rename systemd/{ => archLinux}/dockerDDNS.service (100%) diff --git a/systemd/README.mkd b/systemd/README.mkd deleted file mode 100644 index 7436952..0000000 --- a/systemd/README.mkd +++ /dev/null @@ -1,14 +0,0 @@ - -# Install - -This configuration was tested on ArchLinux, for RedHat/CentOS or Ubuntu you need change path - -1. copy dockerDDNS.py into /usr/local/sbin/ -2. Change permission to let root execute file (chmod 766 /usr/local/sbin/dockerDDNS.py) -2. copy dockerDDNS.service into /etc/systemd/system -3. finaly copy dockerDDNS into /etc/conf.d/ -4. Edit file /etc/conf.d/dockerDDNS , fix Variables for your needs -5. reload systemd configuration file (sudo systemctl daemon-reload) - -Installation complet, It's time to TRY :D - diff --git a/systemd/Ubuntu/README.mkd b/systemd/Ubuntu/README.mkd new file mode 100644 index 0000000..f297cbb --- /dev/null +++ b/systemd/Ubuntu/README.mkd @@ -0,0 +1,37 @@ + +# Install + +This configuration was tested on Ubuntu (16.04) + +1. copy dockerDDNS.py into /usr/local/sbin/ +2. Change permission to let root execute file (chmod 766 /usr/local/sbin/dockerDDNS.py) +2. copy dockerDDNS.service into /etc/systemd/system +3. finaly copy dockerDDNS into /etc/default/ +4. Edit file /etc/default/dockerDDNS , fix Variables for your needs +5. reload systemd configuration file (sudo systemctl daemon-reload) + +Installation complet, It's time to TRY :D + +1. Validation systemd have the new configuration + + $ systemctl list-unit-files | grep dockerDDN + dockerDDNS.service disabled +2. Try to start the new service + + $ systemctl start dockerDDNS.service +3. View the status and fix it problems + + $ systemctl status dockerDDNS.service + dockerDDNS.service - Update a dynamic DNS when Docker starts containers + Loaded: loaded (/etc/systemd/system/dockerDDNS.service; disabled; vendor preset: disabled) + Active: active (running) since Mon 2017-01-09 16:43:21 EST; 4s ago + Main PID: 2067 (python3) + Tasks: 7 (limit: 4915) + Memory: 33.4M + CPU: 263ms + CGroup: /system.slice/dockerDDNS.service + ├─2067 python3 /usr/local/sbin/dockerDDNS.py --key /tmp/bind/key.private --domain dck.example.com. --server 127.0.0.1 + └─2083 docker events +4. Double check, just to be sure :D + + $ ps aux | grep dockerDDNS diff --git a/systemd/dockerDDNS b/systemd/Ubuntu/dockerDDNS similarity index 100% rename from systemd/dockerDDNS rename to systemd/Ubuntu/dockerDDNS diff --git a/systemd/Ubuntu/dockerDDNS.service b/systemd/Ubuntu/dockerDDNS.service new file mode 100644 index 0000000..29b7546 --- /dev/null +++ b/systemd/Ubuntu/dockerDDNS.service @@ -0,0 +1,13 @@ +[Unit] +Description=Update a dynamic DNS when Docker starts containers +After=docker.service +Requires=docker.service + +[Service] +EnvironmentFile=/etc/default/dockerDDNS +ExecStart=/usr/local/sbin/dockerDDNS.py --key $DDNS_UPDATE_KEY --domain $DOMAIN --server $DNS_SERVER --catchup +PIDFile=/var/run/dockerDDNS +KillMode=process + +[Install] +WantedBy=default.target diff --git a/systemd/archLinux/README.mkd b/systemd/archLinux/README.mkd new file mode 100644 index 0000000..6ebf746 --- /dev/null +++ b/systemd/archLinux/README.mkd @@ -0,0 +1,37 @@ + +# Install + +This configuration was tested on ArchLinux (2017-01-09) + +1. copy dockerDDNS.py into /usr/local/sbin/ +2. Change permission to let root execute file (chmod 766 /usr/local/sbin/dockerDDNS.py) +2. copy dockerDDNS.service into /etc/systemd/system +3. finaly copy dockerDDNS into /etc/conf.d/ +4. Edit file /etc/conf.d/dockerDDNS , fix Variables for your needs +5. reload systemd configuration file (sudo systemctl daemon-reload) + +Installation complet, It's time to TRY :D + +1. Validation systemd have the new configuration + + $ systemctl list-unit-files | grep dockerDDN + dockerDDNS.service disabled +2. Try to start the new service + + $ systemctl start dockerDDNS.service +3. View the status and fix it problems + + $ systemctl status dockerDDNS.service + dockerDDNS.service - Update a dynamic DNS when Docker starts containers + Loaded: loaded (/etc/systemd/system/dockerDDNS.service; disabled; vendor preset: disabled) + Active: active (running) since Mon 2017-01-09 16:43:21 EST; 4s ago + Main PID: 2067 (python3) + Tasks: 7 (limit: 4915) + Memory: 33.4M + CPU: 263ms + CGroup: /system.slice/dockerDDNS.service + ├─2067 python3 /usr/local/sbin/dockerDDNS.py --key /tmp/bind/key.private --domain dck.example.com. --server 127.0.0.1 + └─2083 docker events +4. Double check, just to be sure :D + + $ ps aux | grep dockerDDNS diff --git a/systemd/archLinux/dockerDDNS b/systemd/archLinux/dockerDDNS new file mode 100644 index 0000000..f6f1dd2 --- /dev/null +++ b/systemd/archLinux/dockerDDNS @@ -0,0 +1,12 @@ +# Configuration file for the DockerDDNS service +# REF : https://github.com/ggtools/docker-tools + +# DNS key to update bind9 server +DDNS_UPDATE_KEY=/etc/bind/keys/Kdck.example.com.+157+31514.private + +# domain to update +DOMAIN=dck.example.com. + +# DNS server +DNS_SERVER=127.0.0.1 + diff --git a/systemd/dockerDDNS.service b/systemd/archLinux/dockerDDNS.service similarity index 100% rename from systemd/dockerDDNS.service rename to systemd/archLinux/dockerDDNS.service From 411c725a449151d271569481a1ea358c9241a5af Mon Sep 17 00:00:00 2001 From: Thomas Boutry Date: Tue, 10 Jan 2017 08:28:32 -0500 Subject: [PATCH 4/5] Fix typo in configuration example , Remove dot at the end of the domain name --- systemd/Ubuntu/dockerDDNS | 2 +- systemd/archLinux/dockerDDNS | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/systemd/Ubuntu/dockerDDNS b/systemd/Ubuntu/dockerDDNS index f6f1dd2..7a5b9e9 100644 --- a/systemd/Ubuntu/dockerDDNS +++ b/systemd/Ubuntu/dockerDDNS @@ -5,7 +5,7 @@ DDNS_UPDATE_KEY=/etc/bind/keys/Kdck.example.com.+157+31514.private # domain to update -DOMAIN=dck.example.com. +DOMAIN=dck.example.com # DNS server DNS_SERVER=127.0.0.1 diff --git a/systemd/archLinux/dockerDDNS b/systemd/archLinux/dockerDDNS index f6f1dd2..7a5b9e9 100644 --- a/systemd/archLinux/dockerDDNS +++ b/systemd/archLinux/dockerDDNS @@ -5,7 +5,7 @@ DDNS_UPDATE_KEY=/etc/bind/keys/Kdck.example.com.+157+31514.private # domain to update -DOMAIN=dck.example.com. +DOMAIN=dck.example.com # DNS server DNS_SERVER=127.0.0.1 From 41b5bb3d7cd588b63e040ec64a287d5e5855dba5 Mon Sep 17 00:00:00 2001 From: Thomas Boutry Date: Wed, 11 Jan 2017 21:18:59 -0500 Subject: [PATCH 5/5] Fix Regex to work with docker 1.12.1 , event message change , I think because I add no event retrieves --- dockerDDNS.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/dockerDDNS.py b/dockerDDNS.py index 4b0891e..d000cd3 100755 --- a/dockerDDNS.py +++ b/dockerDDNS.py @@ -130,10 +130,10 @@ def remove_container(container_id): if line != '': text_line = line.decode().rstrip() logging.debug("Read line %s", text_line) - m = re.search(r"\s+([0-9a-f]{64}):.*\s+([a-z]+)\s*$", text_line) + m = re.search(r".*\s+container\s+([a-z]+)\s+([0-9a-f]{64}).*$", text_line) if m: - event = m.group(2) - container_id = m.group(1) + event = m.group(1) + container_id = m.group(2) logging.debug("Got event %s for container %s", event, container_id) if event == "start": @@ -146,3 +146,6 @@ def remove_container(container_id): # 2014-11-28T15:32:04.000000000+01:00 a3d66b00acc9adbdbdbc91cc664d2d94b6a07cc4295c5cf54fcc595e2aa92a43: (from mongo:latest) restart # 2015-03-05T08:36:14.000000000+01:00 eb75c1a5ad836d008b0fd66bf6b1ea353510175e8caa619e59d9851029b1ceca: (from ggtools/zabbix-server:latest) exec_start: ifconfig eth0 + +# docker Version: 1.12.1 +# 2017-01-11T20:46:26.268651386-05:00 container start bc340bc76860452fb99ce15101765107f0cf32005e9fcb3261407d81d247307d (image=ubuntu:14.04, name=toto)