Tại thời điểm tôi tìm thấy cùng một vấn đề trong Haproxy Dockerfile. Có lẽ đó là một cái gì đó mà tôi không nắm bắt được. Dù sao một giải pháp đơn giản:
Để tạo một bối cảnh docker đơn giản để gửi:
mkdir haproxy && cd haproxy
Tạo một Dockerfile như sau:
TỪ debian:bullseye-slim
# đại khái, https://salsa.debian.org/haproxy-team/haproxy/-/blob/732b97ae286906dea19ab5744cf9cf97c364ac1d/debian/haproxy.postinst#L5-6
CHẠY bộ -eux; \
groupadd --gid 99 --system haproxy; \
người dùng \
--gid haproxy \
--home-dir /var/lib/haproxy \
--no-tạo-nhà \
--hệ thống \
--uid 99 \
haproxy \
; \
mkdir/var/lib/haproxy; \
chown haproxy: haproxy /var/lib/haproxy
ENV HAPROXY_VERSION 2.5.4
ENV HAPROXY_URL https://www.haproxy.org/download/2.5/src/haproxy-2.5.4.tar.gz
ENV HAPROXY_SHA256 dc4015d85c7fef811b459803b763001d809b07a9251dc1864fedb9a07b44aefb
# xem https://sources.debian.net/src/haproxy/jessie/debian/rules/ để biết một số điều hướng hữu ích về các đối số "tạo" có thể
CHẠY bộ -eux; \
\
đã lưuAptMark="$(apt-mark showmanual)"; \
apt-get update && apt-get install -y --no-install-recommends \
chứng chỉ ca \
gcc \
libc6-dev \
liblua5.3-dev \
libpcre2-dev \
libssl-dev \
chế tạo \
quên \
; \
rm -rf /var/lib/apt/lists/*; \
\
wget -O haproxy.tar.gz "$HAPROXY_URL"; \
tiếng vang "$HAPROXY_SHA256 *haproxy.tar.gz" | sha256sum -c; \
mkdir -p /usr/src/haproxy; \
tar -xzf haproxy.tar.gz -C /usr/src/haproxy --strip-components=1; \
rm haproxy.tar.gz; \
\
makeOpts=' \
MỤC TIÊU=linux-glibc \
USE_GETADDRINFO=1 \
USE_LUA=1 LUA_INC=/usr/include/lua5.3 \
USE_OPENSSL=1 \
USE_PCRE2=1 USE_PCRE2_JIT=1 \
SỬ DỤNG_PROMEX=1 \
\
EXTRA_OBJS="\
" \
'; \
# https://salsa.debian.org/haproxy-team/haproxy/-/commit/53988af3d006ebcbf2c941e34121859fd6379c70
dpkgArch="$(dpkg --print-architecture)"; \
trường hợp "$dpkgArch" trong \
armel) makeOpts="$makeOpts ADDLIB=-latomic" ;; \
esac; \
\
nproc="$(nproc)"; \
eval "make -C /usr/src/haproxy -j '$nproc' all $makeOpts"; \
eval "make -C /usr/src/haproxy install-bin $makeOpts"; \
\
mkdir -p /usr/local/etc/haproxy; \
cp -R /usr/src/haproxy/examples/errorfiles /usr/local/etc/haproxy/errors; \
rm -rf /usr/src/haproxy; \
\
apt-mark auto '.*' > /dev/null; \
[ -z "$savedAptMark" ] || thủ công apt-mark $savedAptMark; \
tìm /usr/local -type f -executable -exec ldd '{}' ';' \
| awk '/=>/ { in $(NF-1) }' \
| sắp xếp -u \
| xargs -r dpkg-query --search \
| cắt -d: -f1 \
| sắp xếp -u \
| hướng dẫn sử dụng xargs -r apt-mark \
; \
apt-get purge -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false; \
\
# thử khói
haproxy -v
# https://www.haproxy.org/download/1.8/doc/manager.txt
# "4. Dừng và khởi động lại HAProxy"
# "khi tín hiệu SIGTERM được gửi đến quy trình haproxy, nó sẽ ngay lập tức thoát và tất cả các kết nối đã thiết lập đều bị đóng"
# "dừng duyên dáng được kích hoạt khi tín hiệu SIGUSR1 được gửi đến quy trình haproxy"
TÍN HIỆU DỪNG SIGUSR1
SAO CHÉP docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
NGƯỜI DÙNG
CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]
Sau đó tạo docker-entrypoint.sh như sau:
chạm vào docker-entrypoint.sh
và dán nội dung sau:
#!/bin/sh
đặt -e
# đối số đầu tiên là `-f` hoặc `--some-option`
nếu [ "${1#-}" != "$1" ]; sau đó
đặt -- haproxy "$@"
fi
nếu [ "$1" = 'haproxy' ]; sau đó
thay đổi # "haproxy"
# nếu người dùng muốn "haproxy", hãy thêm một vài cờ hữu ích
# -W -- "chế độ master-worker" (tương tự như "haproxy-systemd-wrapper" cũ; cho phép tải lại qua "SIGUSR2")
# -db -- tắt chế độ nền
đặt -- haproxy -W -db "$@"
fi
thực thi "$@"
Sau các bước này, bạn có thể xây dựng hình ảnh haproxy đang hoạt động của mình: docker build -t haproxy .