diff --git a/Dockerfile.full b/Dockerfile.full new file mode 100644 index 0000000..e9f59a3 --- /dev/null +++ b/Dockerfile.full @@ -0,0 +1,55 @@ +# 3proxy.full is fully functional 3proxy build based on busibox:glibc +# +#to build: +# docker build -f Dockerfile.full -t 3proxy.full . +#to run: +# by default 3proxy uses safe chroot environment with chroot to /usr/local/3proxy with uid/gid 65535/65535 and expects +# configuration file to be placed in /usr/local/etc/3proxy. +# Paths in configuration file must be relative to /usr/local/3proxy, that is use /logs instead of +# /usr/local/3proxy/logs. nserver in chroot is required for DNS resolution. An example: +# +# echo nserver 8.8.8.8 >/path/to/local/config/directory/3proxy.cfg +# echo proxy -p3129 >>/path/to/local/config/directory/3proxy.cfg +# docker run -p 3129:3129 -v /path/to/local/config/directory:/usr/local/3proxy/conf -name 3proxy.full 3proxy.full +# +# /path/to/local/config/directory in this example must conrain 3proxy.cfg +# if you need 3proxy to be executed without chroot with root permissions, replace /etc/3proxy/3proxy.cfg by e.g. mounting config +# dir to /etc/3proxy ot by providing config file /etc/3proxy/3proxy.cfg +# docker run -p 3129:3129 -v /path/to/local/config/directory:/etc/3proxy -name 3proxy.full 3proxy.full +# +# use "log" without pathname in config to log to stdout. +# plugins are located in /usr/local/3proxy/libexec (/libexec for chroot config). + + +FROM gcc AS buildenv +COPY . 3proxy +RUN cd 3proxy &&\ + echo "">> Makefile.Linux &&\ + echo PLUGINS = StringsPlugin TrafficPlugin PCREPlugin TransparentPlugin SSLPlugin>>Makefile.Linux &&\ + echo LIBS = -l:libcrypto.a -l:libssl.a -ldl >>Makefile.Linux &&\ + make -f Makefile.Linux &&\ + strip bin/3proxy &&\ + strip bin/StringsPlugin.ld.so &&\ + strip bin/TrafficPlugin.ld.so &&\ + strip bin/PCREPlugin.ld.so &&\ + strip bin/TransparentPlugin.ld.so &&\ + strip bin/SSLPlugin.ld.so + +FROM busybox:glibc +COPY --from=buildenv /lib/x86_64-linux-gnu/libdl.so.* /lib/ +COPY --from=buildenv 3proxy/bin/3proxy /bin/ +COPY --from=buildenv 3proxy/bin/*.ld.so /usr/local/3proxy/libexec/ +RUN mkdir /usr/local/3proxy/logs &&\ + mkdir /usr/local/3proxy/conf &&\ + chown -R 65535:65535 /usr/local/3proxy &&\ + chmod -R 550 /usr/local/3proxy &&\ + chmod 750 /usr/local/3proxy/logs &&\ + chmod -R 555 /usr/local/3proxy/libexec &&\ + chown -R root /usr/local/3proxy/libexec &&\ + mkdir /etc/3proxy/ &&\ + echo chroot /usr/local/3proxy 65535 65535 >/etc/3proxy/3proxy.cfg &&\ + echo include /conf/3proxy.cfg >>/etc/3proxy/3proxy.cfg &&\ + chmod 440 /etc/3proxy/3proxy.cfg + + +CMD ["/bin/3proxy", "/etc/3proxy/3proxy.cfg"] diff --git a/Dockerfile.minimal b/Dockerfile.minimal index 7b063be..4ea1d50 100644 --- a/Dockerfile.minimal +++ b/Dockerfile.minimal @@ -1,10 +1,9 @@ # dockerfile for "interactive" minimal 3proxy execution, no configuration mounting is required, configuration # is accepted from stdin. Use "end" command to indicate the end of configuration. Use "log" for stdout logging. -# nserver is required for DNS resolutions (system resolver will not work). # -# This is "scratch" docker with only 3proxy static executable and empty non-writable "run" directory. +# This is busybox based docker with only 3proxy static executable and empty non-writable "run" directory. # -# "plugin" and "system" are not supported +# "plugin" is not supported # # Build: # @@ -22,22 +21,22 @@ #>Makefile.Linux&&\ - echo LDFLAGS = -fPIE -static -O2 -fno-strict-aliasing -pthread >>Makefile.Linux&&\ + echo LDFLAGS = -fPIE -O2 -fno-strict-aliasing -pthread >>Makefile.Linux&&\ echo PLUGINS = >>Makefile.Linux&&\ + echo LIBS = >>Makefile.Linux&&\ + echo CFLAGS = -g -fPIC -O2 -fno-strict-aliasing -c -pthread -DWITHSPLICE -D_GNU_SOURCE -DGETHOSTBYNAME_R -D_THREAD_SAFE -D_REENTRANT -DNOODBC -DWITH_STD_MALLOC -DFD_SETSIZE=4096 -DWITH_POLL -DWITH_NETFILTER -DNOPLUGINS >>Makefile.Linux&&\ make -f Makefile.Linux&&\ - cp bin/3proxy .&&\ - strip 3proxy&&\ - mkdir run&&\ - chmod 555 run + strip bin/3proxy + -FROM scratch -COPY --from=buildenv 3proxy . -COPY --from=buildenv run . -CMD ["./3proxy"] +FROM busybox:glibc +COPY --from=buildenv /3proxy/bin/3proxy /bin/3proxy +RUN mkdir /run && chmod 555 /run +CMD ["/bin/3proxy"]