====== Configuration et utilisation d'haproxy sous Docker ====== On crée un fichier ''Dockerfile'' et un fichier de configuration ''haproxy.cfg'' dans un dossier : $ ls -al total 16 drwxrwxr-x 2 simon simon 4096 Nov 18 10:07 . drwxr-xr-x 5 simon simon 4096 Nov 18 09:44 .. -rw-rw-r-- 1 simon simon 185 Nov 18 09:52 Dockerfile -rw-rw-r-- 1 simon simon 532 Nov 18 10:07 haproxy.cfg Le ''Dockerfile'' : FROM haproxy:1.8.14-alpine COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg LABEL version="0.1-beta" LABEL type="haproxy" EXPOSE 80/tcp EXPOSE 80/udp EXPOSE 443/tcp EXPOSE 443/udp EXPOSE 8080/tcp La configuration ''haproxy.cfg'' : global daemon maxconn 4096 defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms frontend http-in bind *:80 acl is_site1 hdr_end(host) -i domain1.se acl is_site2 hdr_end(host) -i domain2.com use_backend site1 if is_site1 use_backend site2 if is_site2 backend site1 option httpclose option forwardfor server s1 127.0.0.1:30000 maxconn 32 backend site2 option httpclose option forwardfor server s2 127.0.0.1:30001 maxconn 32 listen admin bind *:8080 stats enable On lance la génération de l'image : $ docker build -t haproxy . free(): invalid pointer SIGABRT: abort PC=0xb6d1e206 m=0 sigcode=4294967290 signal arrived during cgo execution goroutine 1 [syscall, locked to thread]: runtime.cgocall(0xaec2c, 0x10449e74, 0xadad0) /usr/lib/go-1.8/src/runtime/cgocall.go:131 +0xb4 fp=0x10449e5c sp=0x10449e40 github.com/docker/docker-credential-helpers/secretservice._Cfunc_free(0x16ff20) github.com/docker/docker-credential-helpers/secretservice/_obj/_cgo_gotypes.go:111 +0x30 fp=0x10449e70 sp=0x10449e5c github.com/docker/docker-credential-helpers/secretservice.Secretservice.List.func5(0x16ff20) /build/golang-github-docker-docker-credential-helpers-0nGw5q/golang-github-docker-docker-credential-helpers-0.5.0/obj-arm-linux-gnueabihf/src/github.com/docker/docker-credential-helpers/secretservice/secretservice_linux.go:96 +0x44 fp=0x10449e88 sp=0x10449e70 github.com/docker/docker-credential-helpers/secretservice.Secretservice.List(0x0, 0x1404a8, 0x1046e168) /build/golang-github-docker-docker-credential-helpers-0nGw5q/golang-github-docker-docker-credential-helpers-0.5.0/obj-arm-linux-gnueabihf/src/github.com/docker/docker-credential-helpers/secretservice/secretservice_linux.go:97 +0x1a0 fp=0x10449edc sp=0x10449e88 github.com/docker/docker-credential-helpers/secretservice.(*Secretservice).List(0x15aecc, 0x1eb3c, 0x1f414, 0x0) :4 +0x44 fp=0x10449ef8 sp=0x10449edc github.com/docker/docker-credential-helpers/credentials.List(0x140a48, 0x15aecc, 0x1404d8, 0x1046e100, 0x0, 0x1220c) /build/golang-github-docker-docker-credential-helpers-0nGw5q/golang-github-docker-docker-credential-helpers-0.5.0/obj-arm-linux-gnueabihf/src/github.com/docker/docker-credential-helpers/credentials/credentials.go:145 +0x24 fp=0x10449f38 sp=0x10449ef8 github.com/docker/docker-credential-helpers/credentials.HandleCommand(0x140a48, 0x15aecc, 0xbecbc7b6, 0x4, 0x1404c0, 0x1046e0f8, 0x1404d8, 0x1046e100, 0xaeaf0, 0xc9738) /build/golang-github-docker-docker-credential-helpers-0nGw5q/golang-github-docker-docker-credential-helpers-0.5.0/obj-arm-linux-gnueabihf/src/github.com/docker/docker-credential-helpers/credentials/credentials.go:60 +0x11c fp=0x10449f6c sp=0x10449f38 github.com/docker/docker-credential-helpers/credentials.Serve(0x140a48, 0x15aecc) /build/golang-github-docker-docker-credential-helpers-0nGw5q/golang-github-docker-docker-credential-helpers-0.5.0/obj-arm-linux-gnueabihf/src/github.com/docker/docker-credential-helpers/credentials/credentials.go:41 +0x170 fp=0x10449fa8 sp=0x10449f6c main.main() /build/golang-github-docker-docker-credential-helpers-0nGw5q/golang-github-docker-docker-credential-helpers-0.5.0/secretservice/cmd/main_linux.go:9 +0x38 fp=0x10449fbc sp=0x10449fa8 runtime.main() /usr/lib/go-1.8/src/runtime/proc.go:185 +0x1e4 fp=0x10449fe4 sp=0x10449fbc runtime.goexit() /usr/lib/go-1.8/src/runtime/asm_arm.s:1017 +0x4 fp=0x10449fe4 sp=0x10449fe4 goroutine 17 [syscall, locked to thread]: runtime.goexit() /usr/lib/go-1.8/src/runtime/asm_arm.s:1017 +0x4 trap 0x6 error 0x0 oldmask 0x0 r0 0x0 r1 0xbecbc19c r2 0x0 r3 0x8 r4 0x0 r5 0xb6fb1968 r6 0xbecbc19c r7 0xaf r8 0xbecbc3e8 r9 0x2 r10 0xb6dfb000 fp 0x1 ip 0xaf sp 0xbecbc190 lr 0xb6d2bb33 pc 0xb6d1e206 cpsr 0x70030 fault 0x0 Sending build context to Docker daemon 3.584kB Step 1/9 : FROM haproxy:1.8.14-alpine ---> 8254a3d7c0a2 Step 2/9 : COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg ---> Using cache ---> 726bb8b2831d Step 3/9 : LABEL version="0.2-beta" ---> Running in 33cd4aeca9b6 Removing intermediate container 33cd4aeca9b6 ---> ea10826e5f6b Step 4/9 : LABEL type="haproxy" ---> Running in 6070b706fb6d Removing intermediate container 6070b706fb6d ---> 3cacd29d9a43 Step 5/9 : EXPOSE 80/tcp ---> Running in b800919bebd2 Removing intermediate container b800919bebd2 ---> ef5d38e646c5 Step 6/9 : EXPOSE 80/udp ---> Running in df8d9d5c95db Removing intermediate container df8d9d5c95db ---> 760d38b14a4f Step 7/9 : EXPOSE 443/tcp ---> Running in 9e8b3dcd642b Removing intermediate container 9e8b3dcd642b ---> 8f4ee4c313ac Step 8/9 : EXPOSE 443/udp ---> Running in e87d071fb6ef Removing intermediate container e87d071fb6ef ---> 3b6da444cc3c Step 9/9 : EXPOSE 8080/tcp ---> Running in ddb64fc64b85 Removing intermediate container ddb64fc64b85 ---> 3e3076009603 Successfully built 3e3076009603 Successfully tagged haproxy:latest On teste la configuration : $ docker run -it --rm --name haproxy-syntax-check haproxy haproxy -c -f /usr/local/etc/haproxy/haproxy.cfg Configuration file is valid Lancer le container : $ docker run -d -p 8080:8080 -p 443:443 -p 80:80 --name my-haproxy3 haproxy $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2c8973e841b2 haproxy "/docker-entrypoint.…" 8 seconds ago Up 5 seconds 80/udp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 443/udp, 0.0.0.0:8080->8080/tcp my-haproxy __Statistiques :__ [[http://192.168.1.101:8080/haproxy?stats|http://192.168.1.101:8080/haproxy?stats]]