Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 44 additions & 13 deletions containerssh/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,64 @@ RUN mkdir -p /containerssh && \
cd /containerssh && \
adduser --uid 1022 --disabled-password --system --no-create-home containerssh && \
chown containerssh /containerssh
# Drop privileges for download

# Detect architecture and download the matching binary
RUN uname -m > /tmp/arch

FROM alpine AS download-amd64
ARG CONTAINERSSH_VERSION
ARG GITHUB_TOKEN
ARG SOURCE_REPO
RUN apk add --no-cache curl
RUN mkdir -p /containerssh && adduser --uid 1022 --disabled-password --system --no-create-home containerssh
USER 1022:1022
RUN cd /containerssh && \
URL=${SOURCE_REPO}/releases/download/${CONTAINERSSH_VERSION}/containerssh_${CONTAINERSSH_VERSION/v/}_linux_amd64.tar.gz && \
if [ -n "${GITHUB_TOKEN}" ]; then \
curl -L -o containerssh.tar.gz --header 'authorization: Bearer ${GITHUB_TOKEN}' ${URL}; \
curl -L -o containerssh.tar.gz --header "authorization: Bearer ${GITHUB_TOKEN}" ${URL}; \
else \
curl -L -o containerssh.tar.gz ${URL}; \
fi && \
tar xzf containerssh.tar.gz && rm containerssh.tar.gz
USER 0:0
RUN mv /containerssh/containerssh /containerssh/containerssh-amd64

FROM alpine AS download-arm64
ARG CONTAINERSSH_VERSION
ARG GITHUB_TOKEN
ARG SOURCE_REPO
RUN apk add --no-cache curl
RUN mkdir -p /containerssh && adduser --uid 1022 --disabled-password --system --no-create-home containerssh
USER 1022:1022
RUN cd /containerssh && \
URL=${SOURCE_REPO}/releases/download/${CONTAINERSSH_VERSION}/containerssh_${CONTAINERSSH_VERSION/v/}_linux_arm64.tar.gz && \
if [ -n "${GITHUB_TOKEN}" ]; then \
curl -L -o containerssh.tar.gz --header "authorization: Bearer ${GITHUB_TOKEN}" ${URL}; \
else \
curl -vvvvv -L -o containerssh.tar.gz ${URL}; \
curl -L -o containerssh.tar.gz ${URL}; \
fi && \
tar -xvvzf containerssh.tar.gz && \
rm containerssh.tar.gz
tar xzf containerssh.tar.gz && rm containerssh.tar.gz
USER 0:0
RUN chown -R root:root /containerssh
RUN mv /containerssh/containerssh /containerssh/containerssh-arm64

FROM alpine AS merge
COPY --from=download-amd64 /containerssh/containerssh-amd64 /containerssh/
COPY --from=download-arm64 /containerssh/containerssh-arm64 /containerssh/
COPY --from=download-amd64 /containerssh/LICENSE* /containerssh/
COPY --from=download-amd64 /containerssh/NOTICE* /containerssh/

FROM alpine
ARG TARGETARCH
RUN apk upgrade --no-cache && apk add --no-cache 'libssl3' 'libcrypto3'
COPY --from=download /containerssh/containerssh /
COPY --from=download /containerssh/LICENSE* /
COPY --from=download /containerssh/NOTICE* /
RUN chmod +x /containerssh
# Copy only the binary for the target architecture
COPY --from=merge /containerssh/containerssh-${TARGETARCH} /containerssh/containerssh
COPY --from=merge /containerssh/LICENSE* /
COPY --from=merge /containerssh/NOTICE*
RUN chmod +x /containerssh && rm -rf /containerssh/containerssh-*
ENTRYPOINT ["/containerssh"]
CMD ["--config", "/etc/containerssh/config.yaml"]
VOLUME /etc/containerssh
VOLUME /var/secrets
# Run as user 1022 to avoid running as root
USER 1022:1022
# Expose SSH port
EXPOSE 2222
# Expose metrics port (disabled by default)
EXPOSE 9100