У меня есть файл составления Docker, который содержит мой контейнер HAProxy и 3 контейнера Cockroach DB (CKDB).Все они работают с узлом сетевого режима.
Я могу присоединиться к узлам CKDB, используя localhost и связанные с ними порты, но мой контейнер HAProxy не может получить доступ к узлам CKDB, используя " localhost ".Если я использую IP-адрес хост-машины, он работает.
Это ограничение для HAProxy или это может быть что-то не так с моими конфигурациями?
Вот файл конфигурации HAProxy:
global
maxconn 4096
defaults
mode tcp
timeout connect 10s
timeout client 1m
timeout server 1m
option clitcpka
frontend ckdb_nodes
bind *:26257
option tcplog
option httpchk GET /health?ready=1
mode tcp
use_backend ckdb_nodes
backend ckdb_nodes
mode tcp
balance roundrobin
option ssl-hello-chk
server cockroach1 localhost:26254 check port 8081
server cockroach2 localhost:26255 check port 8082
server cockroach3 localhost:26256 check port 8083
frontend ckdb_admin_ui
bind *:8080
option tcplog
mode tcp
use_backend ckdb_admin_ui
backend ckdb_admin_ui
mode tcp
balance roundrobin
option ssl-hello-chk
server cockroach1 localhost:8081 check
server cockroach2 localhost:8082 check
server cockroach3 localhost:8083 check
Вот файл составления докера:
services:
ckdb-e1-haproxy:
image: ${IMAGE_STAGING_E1_HAPROXY}:${BUILD_VERSION_STATIC}
ports:
- ${COCKROACH_E1_HAPROXY_PORT}:${COCKROACH_E1_HAPROXY_PORT}
- ${COCKROACH_ADMIN_UI_E1_HAPROXY_PORT}:${COCKROACH_ADMIN_UI_E1_HAPROXY_PORT}
network_mode: "host"
container_name: ${PROJECT}_ckdb-e1-haproxy
depends_on:
- ckdb-e1-node1
- ckdb-e1-node2
- ckdb-e1-node3
ckdb-e1-node1:
image: cockroachdb/cockroach:${CKDB_VERSION}
command: start --certs-dir=${CKDB_CONTAINER_HOST_DIR} --port=${STAGING_E1_NODE1_CKDB_APP_PORT} --http-port=${STAGING_E1_NODE1_CKDB_ADMIN_UI_PORT}
ports:
- ${STAGING_E1_NODE1_CKDB_APP_PORT}:${STAGING_E1_NODE1_CKDB_APP_PORT}
- ${STAGING_E1_NODE1_CKDB_ADMIN_UI_PORT}:${STAGING_E1_NODE1_CKDB_ADMIN_UI_PORT}
volumes:
- type: bind
source: ${CKDB_STAGING_E1_CERTS_DIR}
target: ${CONTAINER_CKDB_CERTS_PATH}
- type: volume
source: staging-app-db-data-e1-node1
target: ${CONTAINER_CKDB_DATA_PATH}
container_name: ${PROJECT}_ckdb-e1-node1
network_mode: "host"
ckdb-e1-node2:
image: cockroachdb/cockroach:${CKDB_VERSION}
command: start --certs-dir=${CKDB_CONTAINER_HOST_DIR} --port=${STAGING_E1_NODE2_CKDB_APP_PORT} --http-port=${STAGING_E1_NODE2_CKDB_ADMIN_UI_PORT} --join=localhost:${STAGING_E1_NODE1_CKDB_APP_PORT}
ports:
- ${STAGING_E1_NODE2_CKDB_APP_PORT}:${STAGING_E1_NODE2_CKDB_APP_PORT}
- ${STAGING_E1_NODE2_CKDB_ADMIN_UI_PORT}:${STAGING_E1_NODE2_CKDB_ADMIN_UI_PORT}
volumes:
- type: bind
source: ${CKDB_STAGING_E1_CERTS_DIR}
target: ${CONTAINER_CKDB_CERTS_PATH}
- type: volume
source: staging-app-db-data-e1-node2
target: ${CONTAINER_CKDB_DATA_PATH}
container_name: ${PROJECT}_ckdb-e1-node2
depends_on:
- ckdb-e1-node1
network_mode: "host"
ckdb-e1-node3:
image: cockroachdb/cockroach:${CKDB_VERSION}
command: start --certs-dir=${CKDB_CONTAINER_HOST_DIR} --port=${STAGING_E1_NODE3_CKDB_APP_PORT} --http-port=${STAGING_E1_NODE3_CKDB_ADMIN_UI_PORT} --join=localhost:${STAGING_E1_NODE1_CKDB_APP_PORT}
ports:
- ${STAGING_E1_NODE3_CKDB_APP_PORT}:${STAGING_E1_NODE3_CKDB_APP_PORT}
- ${STAGING_E1_NODE3_CKDB_ADMIN_UI_PORT}:${STAGING_E1_NODE3_CKDB_ADMIN_UI_PORT}
volumes:
- type: bind
source: ${CKDB_STAGING_E1_CERTS_DIR}
target: ${CONTAINER_CKDB_CERTS_PATH}
- type: volume
source: staging-app-db-data-e1-node3
target: ${CONTAINER_CKDB_DATA_PATH}
container_name: ${PROJECT}_ckdb-e1-node3
depends_on:
- ckdb-e1-node1
- ckdb-e1-node2
network_mode: "host"