FROM alpine:edge MAINTAINER Lars Gierth <lgierth@ipfs.io> # This is a copy of /Dockerfile, # except that we optimize for build time, instead of image size. # # Please keep these two Dockerfiles in sync. EXPOSE 4001 EXPOSE 4002/udp EXPOSE 5001 EXPOSE 8080 ENV GX_IPFS "" ENV IPFS_PATH /data/ipfs ENV IPFS_LOGGING "" ENV GOPATH /go ENV PATH /go/bin:$PATH ENV SRC_PATH /go/src/github.com/ipfs/go-ipfs # This is an optimization which avoids rebuilding # of the gx dependencies every time anything changes. # gx will only be invoked if the dependencies have changed. # # Put differently: if package.json has changed, # the image-id after this COPY command will change, # and trigger a re-run of all following commands. COPY ./package.json $SRC_PATH/package.json RUN apk add --update musl-dev gcc go git bash wget ca-certificates \ && mkdir -p $IPFS_PATH \ && adduser -D -h $IPFS_PATH -u 1000 ipfs \ && chown ipfs:ipfs $IPFS_PATH && chmod 755 $IPFS_PATH \ && go get -u github.com/whyrusleeping/gx \ && go get -u github.com/whyrusleeping/gx-go \ && ([ -z "$GX_IPFS" ] || echo $GX_IPFS > $IPFS_PATH/api) \ && cd $SRC_PATH \ && gx --verbose install --global COPY . $SRC_PATH RUN cd $SRC_PATH \ && mkdir .git/objects && commit=$(git rev-parse --short HEAD) \ && echo "ldflags=-X github.com/ipfs/go-ipfs/repo/config.CurrentCommit=$commit" \ && cd $SRC_PATH/cmd/ipfs \ && go build -ldflags "-X github.com/ipfs/go-ipfs/repo/config.CurrentCommit=$commit" \ && cp ipfs /usr/local/bin/ipfs \ && cp $SRC_PATH/bin/container_daemon /usr/local/bin/start_ipfs \ && chmod 755 /usr/local/bin/start_ipfs \ && apk del --purge musl-dev gcc go git && rm -rf $GOPATH && rm -vf $IPFS_PATH/api USER ipfs VOLUME $IPFS_PATH ENTRYPOINT ["/usr/local/bin/start_ipfs"]