services: docker: Add new fields to support proxy.

The Docker proxy enables inter-container and outside-to-container loopback,
and is required by the Docker registry server.

* gnu/services/docker.scm (docker-configuration)[proxy,
enable-proxy?]: Add fields.
(docker-shepherd-service): Use them.
(serialize-boolean): New function.
This commit is contained in:
Maxim Cournoyer 2019-04-05 02:34:16 -04:00
parent 0b94911add
commit 7a31d93a61
No known key found for this signature in database
GPG key ID: 1260E46482E63562

View file

@ -31,13 +31,25 @@ (define-module (gnu services docker)
#:export (docker-configuration
docker-service-type))
;;; We're not using serialize-configuration, but we must define this because
;;; the define-configuration macro validates it exists.
(define (serialize-boolean field-name val)
"")
(define-configuration docker-configuration
(docker
(package docker)
"Docker daemon package.")
(containerd
(package containerd)
"containerd package."))
"containerd package.")
(proxy
(package docker-libnetwork-cmd-proxy)
"The proxy package to support inter-container and outside-container
loop-back communications.")
(enable-proxy?
(boolean #t)
"Enable or disable the user-land proxy (enabled by default)."))
(define %docker-accounts
(list (user-group (name "docker") (system? #t))))
@ -66,7 +78,9 @@ (define (containerd-shepherd-service config)
(stop #~(make-kill-destructor)))))
(define (docker-shepherd-service config)
(let* ((docker (docker-configuration-docker config)))
(let* ((docker (docker-configuration-docker config))
(enable-proxy? (docker-configuration-enable-proxy? config))
(proxy (docker-configuration-proxy config)))
(shepherd-service
(documentation "Docker daemon.")
(provision '(dockerd))
@ -83,7 +97,10 @@ (define (docker-shepherd-service config)
udev))
(start #~(make-forkexec-constructor
(list (string-append #$docker "/bin/dockerd")
"-p" "/var/run/docker.pid")
"-p" "/var/run/docker.pid"
(if #$enable-proxy? "--userland-proxy" "")
"--userland-proxy-path" (string-append #$proxy
"/bin/proxy"))
#:pid-file "/var/run/docker.pid"
#:log-file "/var/log/docker.log"))
(stop #~(make-kill-destructor)))))