Linux
docker中的HAProxy
我正在嘗試在 docker 上執行 haproxy,但它不起作用。
這是我所做的:
- 創建的 Dockerfile 包含以下文本:
FROM haproxy:2.3 COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg
- 這是我的 haproxy.cfg:
global log /dev/log local0 log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners stats timeout 30s user haproxy group haproxy daemon defaults log global mode http option httplog option dontlognull timeout connect 10s timeout client 60s timeout server 60s # errorfile 400 /etc/haproxy/errors/400.http # errorfile 403 /etc/haproxy/errors/403.http # errorfile 408 /etc/haproxy/errors/408.http # errorfile 500 /etc/haproxy/errors/500.http # errorfile 502 /etc/haproxy/errors/502.http # errorfile 503 /etc/haproxy/errors/503.http # errorfile 504 /etc/haproxy/errors/504.http frontend https_in mode tcp option tcplog bind *:443 acl tls req.ssl_hello_type 1 tcp-request inspect-delay 5s tcp-request content accept if tls acl host_server1 req.ssl_sni -i my1stdomain.com acl host_server2 req.ssl_sni -i my2nddomain.com use_backend https_Server if host_server1 use_backend https_NUC if host_server2 backend https_Server mode tcp # option tcplog option ssl-hello-chk server Server 10.0.0.10:443 backend https_NUC mode tcp # option tcplog option ssl-hello-chk server NUC 10.0.0.40:443
- 目的是將 SSL 埠 443
my1stdomain.com
指向 LAN IP10.0.0.10
和my2nddomain.com
IP10.0.0.40
- docker 應該位於 10.0.0.44,所以這些是我執行的命令:
docker build -t my-haproxy .
結果:
Sending build context to Docker daemon 4.096kB Step 1/2 : FROM haproxy:2.3 ---> 397cf3d55fac Step 2/2 : COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg ---> Using cache ---> a5cc1ff3c0c6 Successfully built a5cc1ff3c0c6 Successfully tagged my-haproxy:latest
然後,我測試了配置:
docker run -it --rm --name haproxy-syntax-check my-haproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg Configuration file is valid
然後,我嘗試執行它:
docker run -d --name haproxy --restart=always -p 10.0.0.44:443:443/tcp my-haproxy a253dbce7341e454353e9a2b4278e22ae8172ed106aeec7
但是,當我執行時
docker ps
,我發現它並沒有真正執行:docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a253dbce7341 my-haproxy "docker-entrypoint.s…" About a minute ago Restarting (1) 12 seconds ago haproxy
有什麼建議嗎?
您應該檢查此容器的故障日誌,而不是總是重新啟動它。您可以從命令中刪除
-d
標誌以在前台執行此容器,以便在標準輸出上獲取日誌:docker run --name haproxy --restart=always -p 10.0.0.44:443:443/tcp my-haproxy
我用你
haproxy.cfg
來檢查問題。我在容器日誌中發現了以下兩個問題:
- 您正在使用
/var/lib/haproxy
chroot 但此目錄不能由非 root 使用者創建。因此,您可以顯式創建它並將所有權更改為haproxy
使用者。- 在
stats socket /run/haproxy/admin.sock
命令中,/run/haproxy
需要創建目錄。因此,您的 Dockerfile 應該像這樣更新以使其工作:
FROM haproxy:2.3 RUN mkdir --parents /var/lib/haproxy && chown -R haproxy:haproxy /var/lib/haproxy RUN mkdir /run/haproxy COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg