@@ -19,110 +19,118 @@ RUN groupadd -g 5984 -r couchdb && useradd -u 5984 -d /opt/couchdb -g couchdb co
19
19
20
20
# be sure GPG and apt-transport-https are available and functional
21
21
RUN set -ex; \
22
- apt-get update; \
23
- apt-get install -y --no-install-recommends \
24
- apt-transport-https \
25
- ca-certificates \
26
- dirmngr \
27
- gnupg \
28
- ; \
29
- rm -rf /var/lib/apt/lists/*
22
+ apt-get update; \
23
+ apt-get install -y --no-install-recommends \
24
+ apt-transport-https \
25
+ ca-certificates \
26
+ dirmngr \
27
+ gnupg \
28
+ ; \
29
+ rm -rf /var/lib/apt/lists/*
30
30
31
31
# grab gosu for easy step-down from root and tini for signal handling and zombie reaping
32
32
# see https://github.com/apache/couchdb-docker/pull/28#discussion_r141112407
33
33
ENV GOSU_VERSION 1.11
34
34
ENV TINI_VERSION 0.18.0
35
35
RUN set -ex; \
36
- \
37
- apt-get update; \
38
- apt-get install -y --no-install-recommends wget; \
39
- rm -rf /var/lib/apt/lists/*; \
40
- \
41
- dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" ; \
42
- \
36
+ \
37
+ apt-get update; \
38
+ apt-get install -y --no-install-recommends wget; \
39
+ rm -rf /var/lib/apt/lists/*; \
40
+ \
41
+ dpkgArch="$(dpkg --print-architecture | awk -F- '{ print $NF }')" ; \
42
+ \
43
43
# install gosu
44
- wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-$dpkgArch" ; \
45
- wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" ; \
46
- export GNUPGHOME="$(mktemp -d)" ; \
47
- echo "disable-ipv6" >> ${GNUPGHOME}/dirmngr.conf; \
48
- for server in $(shuf -e pgpkeys.mit.edu \
49
- ha.pool.sks-keyservers.net \
50
- hkp://p80.pool.sks-keyservers.net:80 \
51
- pgp.mit.edu) ; do \
52
- gpg --batch --keyserver $server --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 && break || : ; \
53
- done; \
54
- gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
55
- rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
56
- chmod +x /usr/local/bin/gosu; \
57
- gosu nobody true; \
44
+ wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/${GOSU_VERSION}/gosu-$dpkgArch" ; \
45
+ wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$dpkgArch.asc" ; \
46
+ export GNUPGHOME="$(mktemp -d)" ; \
47
+ echo "disable-ipv6" >> ${GNUPGHOME}/dirmngr.conf; \
48
+ for server in $(shuf -e pgpkeys.mit.edu \
49
+ ha.pool.sks-keyservers.net \
50
+ hkp://p80.pool.sks-keyservers.net:80 \
51
+ pgp.mit.edu) ; do \
52
+ gpg --batch --keyserver $server --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 && break || : ; \
53
+ done; \
54
+ gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \
55
+ rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \
56
+ chmod +x /usr/local/bin/gosu; \
57
+ gosu nobody true; \
58
58
\
59
59
# install tini
60
- wget -O /usr/local/bin/tini "https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-$dpkgArch" ; \
61
- wget -O /usr/local/bin/tini.asc "https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-$dpkgArch.asc" ; \
62
- export GNUPGHOME="$(mktemp -d)" ; \
63
- echo "disable-ipv6" >> ${GNUPGHOME}/dirmngr.conf; \
64
- for server in $(shuf -e pgpkeys.mit.edu \
65
- ha.pool.sks-keyservers.net \
66
- hkp://p80.pool.sks-keyservers.net:80 \
67
- pgp.mit.edu) ; do \
68
- gpg --batch --keyserver $server --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 && break || : ; \
69
- done; \
70
- gpg --batch --verify /usr/local/bin/tini.asc /usr/local/bin/tini; \
71
- rm -rf "$GNUPGHOME" /usr/local/bin/tini.asc; \
72
- chmod +x /usr/local/bin/tini; \
73
- apt-get purge -y --auto-remove wget; \
74
- tini --version
60
+ wget -O /usr/local/bin/tini "https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-$dpkgArch" ; \
61
+ wget -O /usr/local/bin/tini.asc "https://github.com/krallin/tini/releases/download/v${TINI_VERSION}/tini-$dpkgArch.asc" ; \
62
+ export GNUPGHOME="$(mktemp -d)" ; \
63
+ echo "disable-ipv6" >> ${GNUPGHOME}/dirmngr.conf; \
64
+ for server in $(shuf -e pgpkeys.mit.edu \
65
+ ha.pool.sks-keyservers.net \
66
+ hkp://p80.pool.sks-keyservers.net:80 \
67
+ pgp.mit.edu) ; do \
68
+ gpg --batch --keyserver $server --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 && break || : ; \
69
+ done; \
70
+ gpg --batch --verify /usr/local/bin/tini.asc /usr/local/bin/tini; \
71
+ rm -rf "$GNUPGHOME" /usr/local/bin/tini.asc; \
72
+ chmod +x /usr/local/bin/tini; \
73
+ apt-get purge -y --auto-remove wget; \
74
+ tini --version
75
75
76
76
# http://docs.couchdb.org/en/latest/install/unix.html#installing-the-apache-couchdb-packages
77
77
ENV GPG_COUCH_KEY \
78
78
# gpg: key D401AB61: public key "Bintray (by JFrog) <[email protected] > imported
79
- 8756C4F765C9AC3CB6B85D62379CE192D401AB61
79
+ 8756C4F765C9AC3CB6B85D62379CE192D401AB61
80
80
RUN set -xe; \
81
- export GNUPGHOME="$(mktemp -d)" ; \
82
- echo "disable-ipv6" >> ${GNUPGHOME}/dirmngr.conf; \
83
- for server in $(shuf -e pgpkeys.mit.edu \
84
- ha.pool.sks-keyservers.net \
85
- hkp://p80.pool.sks-keyservers.net:80 \
86
- pgp.mit.edu) ; do \
87
- gpg --batch --keyserver $server --recv-keys $GPG_COUCH_KEY && break || : ; \
88
- done; \
89
- gpg --batch --export $GPG_COUCH_KEY > /etc/apt/trusted.gpg.d/couchdb.gpg; \
90
- command -v gpgconf && gpgconf --kill all || :; \
91
- rm -rf "$GNUPGHOME" ; \
92
- apt-key list
81
+ export GNUPGHOME="$(mktemp -d)" ; \
82
+ echo "disable-ipv6" >> ${GNUPGHOME}/dirmngr.conf; \
83
+ for server in $(shuf -e pgpkeys.mit.edu \
84
+ ha.pool.sks-keyservers.net \
85
+ hkp://p80.pool.sks-keyservers.net:80 \
86
+ pgp.mit.edu) ; do \
87
+ gpg --batch --keyserver $server --recv-keys $GPG_COUCH_KEY && break || : ; \
88
+ done; \
89
+ gpg --batch --export $GPG_COUCH_KEY > /etc/apt/trusted.gpg.d/couchdb.gpg; \
90
+ command -v gpgconf && gpgconf --kill all || :; \
91
+ rm -rf "$GNUPGHOME" ; \
92
+ apt-key list
93
93
94
94
ENV COUCHDB_VERSION 2.3.1
95
95
96
96
RUN echo "deb https://apache.bintray.com/couchdb-deb stretch main" > /etc/apt/sources.list.d/couchdb.list
97
97
98
98
# https://github.com/apache/couchdb-pkg/blob/master/debian/README.Debian
99
99
RUN set -xe; \
100
- apt-get update; \
101
- \
102
- echo "couchdb couchdb/mode select none" | debconf-set-selections; \
100
+ apt-get update; \
101
+ \
102
+ echo "couchdb couchdb/mode select none" | debconf-set-selections; \
103
103
# we DO want recommends this time
104
- DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
105
- couchdb="$COUCHDB_VERSION" ~stretch \
106
- ; \
104
+ DEBIAN_FRONTEND=noninteractive apt-get install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages \
105
+ couchdb="$COUCHDB_VERSION" ~stretch \
106
+ ; \
107
107
# Undo symlinks to /var/log and /var/lib
108
- rmdir /var/lib/couchdb /var/log/couchdb; \
109
- rm /opt/couchdb/data /opt/couchdb/var/log; \
110
- mkdir -p /opt/couchdb/data /opt/couchdb/var/log; \
111
- chown couchdb:couchdb /opt/couchdb/data /opt/couchdb/var/log; \
112
- chmod 777 /opt/couchdb/data /opt/couchdb/var/log; \
108
+ rmdir /var/lib/couchdb /var/log/couchdb; \
109
+ rm /opt/couchdb/data /opt/couchdb/var/log; \
110
+ mkdir -p /opt/couchdb/data /opt/couchdb/var/log; \
111
+ chown couchdb:couchdb /opt/couchdb/data /opt/couchdb/var/log; \
112
+ chmod 777 /opt/couchdb/data /opt/couchdb/var/log; \
113
113
# Remove file that sets logging to a file
114
- rm /opt/couchdb/etc/default.d/10-filelog.ini; \
115
- rm -rf /var/lib/apt/lists/*
114
+ rm /opt/couchdb/etc/default.d/10-filelog.ini; \
115
+ # Check we own everything in /opt/couchdb. Matches the command in dockerfile_entrypoint.sh
116
+ find /opt/couchdb \! \( -user couchdb -group couchdb \) -exec chown -f couchdb:couchdb '{}' +; \
117
+ # Setup directories and permissions for config. Technically these could be 555 and 444 respectively
118
+ # but we keep them as 755 and 644 for consistency with CouchDB defaults and the dockerfile_entrypoint.sh.
119
+ find /opt/couchdb/etc -type d ! -perm 0755 -exec chmod -f 0755 '{}' +; \
120
+ find /opt/couchdb/etc -type f ! -perm 0644 -exec chmod -f 0644 '{}' +; \
121
+ # only local.d needs to be writable for the docker_entrypoint.sh
122
+ chmod -f 0777 /opt/couchdb/etc/local.d; \
123
+ # apt clean-up
124
+ rm -rf /var/lib/apt/lists/*;
116
125
117
126
# Add configuration
118
- COPY 10-docker-default.ini /opt/couchdb/etc/default.d/
119
- COPY vm.args /opt/couchdb/etc/
127
+ COPY --chown=couchdb:couchdb 10-docker-default.ini /opt/couchdb/etc/default.d/
128
+ COPY --chown=couchdb:couchdb vm.args /opt/couchdb/etc/
129
+
120
130
COPY docker-entrypoint.sh /usr/local/bin
121
131
RUN ln -s usr/local/bin/docker-entrypoint.sh /docker-entrypoint.sh # backwards compat
122
132
ENTRYPOINT ["tini" , "--" , "/docker-entrypoint.sh" ]
123
133
124
- # Setup directories and permissions
125
- RUN find /opt/couchdb \! \( -user couchdb -group couchdb \) -exec chown -f couchdb:couchdb '{}' +
126
134
VOLUME /opt/couchdb/data
127
135
128
136
# 5984: Main CouchDB endpoint
0 commit comments