Skip to content
Merged
Show file tree
Hide file tree
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
55 changes: 27 additions & 28 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
FROM --platform=$BUILDPLATFORM rust:1.53.0-buster AS build
FROM --platform=$BUILDPLATFORM rust:1.61.0-alpine AS builder

ARG TARGETARCH

RUN apt-get update && apt-get install -y build-essential curl musl-tools
RUN set -x \
&& apk add --no-cache build-base

WORKDIR /root/shadowsocks-rust

ADD . .

RUN rustup install nightly && rustup default nightly && \
case "$TARGETARCH" in \
"386") \
RUN case "$TARGETARCH" in \
"386") \
RUST_TARGET="i686-unknown-linux-musl" \
MUSL="i686-linux-musl" \
;; \
Expand All @@ -26,31 +26,30 @@ RUN rustup install nightly && rustup default nightly && \
echo "Doesn't support $TARGETARCH architecture" \
exit 1 \
;; \
esac && \
wget -qO- "https://musl.cc/$MUSL-cross.tgz" | tar -xzC /root/ && \
CC=/root/$MUSL-cross/bin/$MUSL-gcc && \
rustup target add $RUST_TARGET && \
RUSTFLAGS="-C linker=$CC" CC=$CC cargo build --target "$RUST_TARGET" --release --features "local-tun local-redir armv8 neon" && \
mv target/$RUST_TARGET/release/ss* target/release/

FROM alpine:3.14 AS sslocal

COPY --from=build /root/shadowsocks-rust/target/release/sslocal /usr/bin
COPY --from=build /root/shadowsocks-rust/examples/config.json /etc/shadowsocks-rust/
COPY --from=build /root/shadowsocks-rust/docker/docker-entrypoint.sh /

USER nobody

ENTRYPOINT [ "/docker-entrypoint.sh" ]
esac \
&& wget -qO- "https://musl.cc/$MUSL-cross.tgz" | tar -xzC /root/ \
&& CC=/root/$MUSL-cross/bin/$MUSL-gcc \
&& rustup target add $RUST_TARGET \
&& RUSTFLAGS="-C linker=$CC" \
&& CC=$CC \
&& cargo build --target "$RUST_TARGET" --release --features "local-tun local-redir armv8 neon stream-cipher aead-cipher-2022" \
&& mv target/$RUST_TARGET/release/ss* target/release/

FROM alpine:3.16 AS sslocal

COPY --from=builder /root/shadowsocks-rust/target/release/sslocal /usr/local/bin/
COPY --from=builder /root/shadowsocks-rust/examples/config.json /etc/shadowsocks-rust/
COPY --from=builder /root/shadowsocks-rust/docker/docker-entrypoint.sh /usr/local/bin/

ENTRYPOINT [ "docker-entrypoint.sh" ]
CMD [ "sslocal", "--log-without-time", "-c", "/etc/shadowsocks-rust/config.json" ]

FROM alpine:3.14 AS ssserver
FROM alpine:3.16 AS ssserver

COPY --from=build /root/shadowsocks-rust/target/release/ssserver /usr/bin
COPY --from=build /root/shadowsocks-rust/examples/config.json /etc/shadowsocks-rust/
COPY --from=build /root/shadowsocks-rust/docker/docker-entrypoint.sh /
COPY --from=builder /root/shadowsocks-rust/target/release/ssserver /usr/local/bin/
COPY --from=builder /root/shadowsocks-rust/examples/config.json /etc/shadowsocks-rust/
COPY --from=builder /root/shadowsocks-rust/docker/docker-entrypoint.sh /usr/local/bin/

USER nobody
ENTRYPOINT [ "docker-entrypoint.sh" ]

ENTRYPOINT [ "/docker-entrypoint.sh" ]
CMD [ "ssserver", "--log-without-time", "-c", "/etc/shadowsocks-rust/config.json" ]
CMD [ "ssserver", "--log-without-time", "-a", "nobody", "-c", "/etc/shadowsocks-rust/config.json" ]
24 changes: 3 additions & 21 deletions docker/docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,29 +10,11 @@ else
fi

if [ "$1" = "sslocal" -o "$1" = "ssserver" -o "$1" = "ssmanager" -o "$1" = "ssservice" ]; then
if /usr/bin/find "/docker-entrypoint.d/" -mindepth 1 -maxdepth 1 -type f -print -quit 2>/dev/null | read v; then
echo >&3 "$0: /docker-entrypoint.d/ is not empty, will attempt to perform configuration"

echo >&3 "$0: Looking for shell scripts in /docker-entrypoint.d/"
find "/docker-entrypoint.d/" -follow -type f -print | sort -V | while read -r f; do
case "$f" in
*.sh)
if [ -x "$f" ]; then
echo >&3 "$0: Launching $f";
"$f"
else
# warn on shell scripts without exec bit
echo >&3 "$0: Ignoring $f, not executable";
fi
;;
*) echo >&3 "$0: Ignoring $f";;
esac
done

if [ -f "/etc/shadowsocks-rust/config.json" ]; then
echo >&3 "$0: Configuration complete; ready for start up"
else
echo >&3 "$0: No files found in /docker-entrypoint.d/, skipping configuration"
echo >&3 "$0: No configuration files found in /etc/shadowsocks-rust, skipping configuration"
fi
fi

exec "$@"
exec "$@"