├── docker-entrypoint.sh └── Dockerfile /docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | if [[ "$1" == "bitcoin-cli" || "$1" == "bitcoin-tx" || "$1" == "bitcoind" || "$1" == "test_bitcoin" ]]; then 5 | mkdir -p "$BITCOIN_DATA" 6 | 7 | if [[ ! -s "$BITCOIN_DATA/bitcoin.conf" ]]; then 8 | cat <<-EOF > "$BITCOIN_DATA/bitcoin.conf" 9 | printtoconsole=1 10 | rpcallowip=::/0 11 | rpcpassword=${BITCOIN_RPC_PASSWORD:-password} 12 | rpcuser=${BITCOIN_RPC_USER:-bitcoin} 13 | EOF 14 | chown bitcoin:bitcoin "$BITCOIN_DATA/bitcoin.conf" 15 | fi 16 | 17 | # ensure correct ownership and linking of data directory 18 | # we do not update group ownership here, in case users want to mount 19 | # a host directory and still retain access to it 20 | chown -R bitcoin "$BITCOIN_DATA" 21 | ln -sfn "$BITCOIN_DATA" /home/bitcoin/.bitcoin 22 | chown -h bitcoin:bitcoin /home/bitcoin/.bitcoin 23 | 24 | exec gosu bitcoin "$@" 25 | fi 26 | 27 | exec "$@" 28 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM debian:stretch-slim 2 | 3 | RUN groupadd -r bitcoin && useradd -r -m -g bitcoin bitcoin 4 | 5 | RUN set -ex \ 6 | && apt-get update \ 7 | && apt-get install -qq --no-install-recommends ca-certificates dirmngr gosu gpg wget \ 8 | && rm -rf /var/lib/apt/lists/* 9 | 10 | ENV BITCOIN_VERSION 0.16.2 11 | ENV BITCOIN_URL https://bitcoin.org/bin/bitcoin-core-0.16.2/bitcoin-0.16.2-x86_64-linux-gnu.tar.gz 12 | ENV BITCOIN_SHA256 71f217e30e98d5ccc1fb574b9499595e87e118e596278fad5507a7b84650859c 13 | ENV BITCOIN_ASC_URL https://bitcoin.org/bin/bitcoin-core-0.16.2/SHA256SUMS.asc 14 | ENV BITCOIN_PGP_KEY 01EA5486DE18A882D4C2684590C8019E36C2E964 15 | 16 | # install bitcoin binaries 17 | RUN set -ex \ 18 | && cd /tmp \ 19 | && wget -qO bitcoin.tar.gz "$BITCOIN_URL" \ 20 | && echo "$BITCOIN_SHA256 bitcoin.tar.gz" | sha256sum -c - \ 21 | && gpg --keyserver keyserver.ubuntu.com --recv-keys "$BITCOIN_PGP_KEY" \ 22 | && wget -qO bitcoin.asc "$BITCOIN_ASC_URL" \ 23 | && gpg --verify bitcoin.asc \ 24 | && tar -xzvf bitcoin.tar.gz -C /usr/local --strip-components=1 --exclude=*-qt \ 25 | && rm -rf /tmp/* 26 | 27 | # create data directory 28 | ENV BITCOIN_DATA /data 29 | RUN mkdir "$BITCOIN_DATA" \ 30 | && chown -R bitcoin:bitcoin "$BITCOIN_DATA" \ 31 | && ln -sfn "$BITCOIN_DATA" /home/bitcoin/.bitcoin \ 32 | && chown -h bitcoin:bitcoin /home/bitcoin/.bitcoin 33 | VOLUME /data 34 | 35 | COPY docker-entrypoint.sh /entrypoint.sh 36 | ENTRYPOINT ["/entrypoint.sh"] 37 | 38 | EXPOSE 8332 8333 18332 18333 39 | CMD ["bitcoind"] 40 | --------------------------------------------------------------------------------