Files
atomic-swap/scripts/docker-bootnode/Dockerfile

50 lines
1.9 KiB
Docker

FROM golang:1.21 as builder
ARG VERSION=latest
RUN go install -tags=prod \
github.com/athanorlabs/atomic-swap/cmd/bootnode@"${VERSION}" \
github.com/athanorlabs/atomic-swap/cmd/swapcli@"${VERSION}"
RUN /go/bin/bootnode --version
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y ca-certificates gosu
COPY --from=builder /go/bin/ /usr/local/bin/
COPY ./docker-entrypoint.sh /usr/local/bin/
VOLUME /data
# USER_UID and USER_GID are defined as ARGs so that, if desired, you can
# build the container with a UID equal to some user outside the container
# that will own the files in /data.
ARG USER_UID=1000
ARG USER_GID=$USER_UID
RUN groupadd --gid "${USER_GID}" atomic && \
useradd --no-log-init --home-dir /atomic-swap \
--uid "${USER_UID}" --gid "${USER_GID}" -m atomic && \
ln -s /data /atomic-swap/.atomicswap
# 9909 is the default p2p port. bootnode also listens to swapcli on
# 127.0.0.1:5000, which is not accessible outside the container by default. You
# have 2 options to interact with the RPC port:
# (1) Use swapcli inside the container::
# $ docker exec CONTAINER_NAME_OR_ID swapcli SUBCOMMAND ...
# (2) Run the container with --network=host so 127.0.0.1:5000 is the same
# port inside and outside of the container.
EXPOSE 9909/udp
EXPOSE 9909/tcp
# The swapd environment (dev, stagenet, mainnet) can be convigured via the
# SWAPD_ENV environment variable or using swapd's --env flag (which takes
# precidence). In docker, we use the environment variable to configure file
# permissions of the correct directory in the data volume. The suggested
# ways of working with this are:
# (1) Set SWAPD_ENV variable and don't use the CLI flag
# (2) Use swapd's --env=ENVIRONMENT CLI flag, but set SWAPD_ENV to the
# identical environment or the empty string.
ENV SWAPD_ENV=stagenet
ENV SWAPD_LOG_LEVEL=info
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
CMD ["bootnode"]