Skip to content

Commit 2467ebf

Browse files
committed
proper permission usage for volumes
The official images used as a reference (http://stackoverflow.com/a/29799703)
1 parent 00ffead commit 2467ebf

File tree

2 files changed

+49
-18
lines changed

2 files changed

+49
-18
lines changed

Dockerfile

+32-18
Original file line numberDiff line numberDiff line change
@@ -4,37 +4,51 @@ MAINTAINER Kyle Manna <[email protected]>
44
ARG USER_ID
55
ARG GROUP_ID
66

7-
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8842ce5e && \
8-
echo "deb http://ppa.launchpad.net/bitcoin/bitcoin/ubuntu xenial main" > /etc/apt/sources.list.d/bitcoin.list
9-
10-
RUN apt-get update && \
11-
apt-get install -y bitcoind && \
12-
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
13-
147
ENV HOME /bitcoin
158

169
# add user with specified (or default) user/group ids
1710
ENV USER_ID ${USER_ID:-1000}
1811
ENV GROUP_ID ${GROUP_ID:-1000}
19-
RUN groupadd -g ${GROUP_ID} bitcoin
20-
RUN useradd -u ${USER_ID} -g bitcoin -s /bin/bash -m -d /bitcoin bitcoin
2112

22-
RUN chown bitcoin:bitcoin -R /bitcoin
13+
# add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added
14+
RUN groupadd -g ${GROUP_ID} bitcoin \
15+
&& useradd -u ${USER_ID} -g bitcoin -s /bin/bash -m -d /bitcoin bitcoin
2316

24-
ADD ./bin /usr/local/bin
25-
RUN chmod a+x /usr/local/bin/*
17+
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8842ce5e && \
18+
echo "deb http://ppa.launchpad.net/bitcoin/bitcoin/ubuntu xenial main" > /etc/apt/sources.list.d/bitcoin.list
19+
20+
RUN apt-get update && apt-get install -y --no-install-recommends \
21+
bitcoind \
22+
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
23+
24+
# grab gosu for easy step-down from root
25+
ENV GOSU_VERSION 1.7
26+
RUN set -x \
27+
&& apt-get update && apt-get install -y --no-install-recommends \
28+
ca-certificates \
29+
wget \
30+
&& wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \
31+
&& wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \
32+
&& export GNUPGHOME="$(mktemp -d)" \
33+
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \
34+
&& gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \
35+
&& rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \
36+
&& chmod +x /usr/local/bin/gosu \
37+
&& gosu nobody true \
38+
&& apt-get purge \
39+
ca-certificates \
40+
wget \
41+
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
2642

27-
# For some reason, docker.io (0.9.1~dfsg1-2) pkg in Ubuntu 14.04 has permission
28-
# denied issues when executing /bin/bash from trusted builds. Building locally
29-
# works fine (strange). Using the upstream docker (0.11.1) pkg from
30-
# http://get.docker.io/ubuntu works fine also and seems simpler.
31-
USER bitcoin
43+
ADD ./bin /usr/local/bin
3244

3345
VOLUME ["/bitcoin"]
3446

3547
EXPOSE 8332 8333 18332 18333
3648

3749
WORKDIR /bitcoin
3850

39-
CMD ["btc_oneshot"]
51+
COPY docker-entrypoint.sh /usr/local/bin/
52+
ENTRYPOINT ["docker-entrypoint.sh"]
4053

54+
CMD ["btc_oneshot"]

docker-entrypoint.sh

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/bin/sh
2+
set -e
3+
4+
# first arg is `-f` or `--some-option`
5+
# or first arg is `something.conf`
6+
if [ "${1#-}" != "$1" ] || [ "${1%.conf}" != "$1" ]; then
7+
set -- btc_oneshot "$@"
8+
fi
9+
10+
# allow the container to be started with `--user`
11+
if [ "$1" = 'btc_oneshot' -a "$(id -u)" = '0' ]; then
12+
chown -R bitcoin .
13+
exec gosu bitcoin "$0" "$@"
14+
fi
15+
16+
exec "$@"
17+

0 commit comments

Comments
 (0)