Docker Compose 部署到 Docker Swarm 服务名称下划线问题

问题描述 投票:0回答:1
cat .env
COMPOSE_PROJECT_NAME=docker-trino
DISCOVERY_URI=http://${COMPOSE_PROJECT_NAME}-trino-master:8080
HIVE_METASTORE_URI=thrift://${COMPOSE_PROJECT_NAME}-hive-metastore:9083

services:
  hive-metastore:
    build: 
      dockerfile: ../hive-metastore/Dockerfile
      context: ../hive-metastore
    image: 127.0.0.1:5000/hive-metastore:3.1.3
    networks: 
      - trino-network-docker
    environment:
      - DATABASE_HOST=mysql-hivemeta.rds.aws.com
      - PROJECT_NAME=${COMPOSE_PROJECT_NAME}
    ports:
      - "9083:9083"
    restart: unless-stopped
    extra_hosts:
      - "host.docker.internal:host-gateway"


trino-master:
    build: 
      dockerfile: ../trino/Dockerfile
      context: ../trino
    image: 127.0.0.1:5000/trinodb/trino:latest 
    networks:
      - trino-network-docker
    volumes:
      - ../trino/master/conf/:/etc/trino/
      - ../trino/data:/data/trino/
     #- /.aws/:/root/.aws/
     #- /.aws/:/home/trino/.aws/
    ports:
      - "8080:8080"
    restart: unless-stopped
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - PROJECT_NAME=${COMPOSE_PROJECT_NAME}
      - DISCOVERY_URI=${DISCOVERY_URI}
      - HIVE_METASTORE_URI=${HIVE_METASTORE_URI}
      - INCLUDE_COORDINATOR=${INCLUDE_COORDINATOR}
    command: sh -c 'sed -i "/coordinator=/d" /etc/trino/config.properties && 
                    echo coordinator=true >> /etc/trino/config.properties && 
                    sed -i "/discovery.uri/d" /etc/trino/config.properties && 
                    echo discovery.uri=${DISCOVERY_URI} >> /etc/trino/config.properties && 
                    sed -i "/hive.metastore.uri/d" /etc/trino/catalog/hive.properties && 
                    echo hive.metastore.uri=${HIVE_METASTORE_URI} >> /etc/trino/catalog/hive.properties && 
                    sed -i "/node-scheduler.include-coordinator/d" /etc/trino/config.properties && 
                    echo node-scheduler.include-coordinator=${INCLUDE_COORDINATOR} >> /etc/trino/config.properties && 
                    sed -i "/discovery-server.enabled/d" /etc/trino/config.properties && 
                    echo discovery-server.enabled=true >> /etc/trino/config.properties && 
                    /usr/lib/trino/bin/run-trino'
    healthcheck:
      test: /usr/lib/trino/bin/health-check 
      interval: 60s
      retries: 5
      start_period: 30s
      timeout: 30s

    depends_on:
       - hive-metastore  
  trino-worker:
    build: 
      dockerfile: ../trino/Dockerfile
      context: ../trino
    image: 127.0.0.1:5000/trinodb/trino:latest 
    networks:
      - trino-network-docker
    volumes:
      - ../trino/worker/conf/:/etc/trino/
      - ../trino/master/conf/catalog/:/etc/trino/catalog
      - ../trino/data:/data/trino/
     #- /.aws/:/root/.aws/
     #- /.aws/:/home/trino/.aws/
    ports:
      - "8081-8099:8080"
    restart: unless-stopped
    extra_hosts:
      - "host.docker.internal:host-gateway"
    environment:
      - PROJECT_NAME=${COMPOSE_PROJECT_NAME}
      - DISCOVERY_URI=${DISCOVERY_URI}
      - HIVE_METASTORE_URI=${HIVE_METASTORE_URI}
      - INCLUDE_COORDINATOR=${INCLUDE_COORDINATOR}
    command: sh -c 'sed -i "/coordinator=/d" /etc/trino/config.properties && 
                    echo coordinator=false >> /etc/trino/config.properties && 
                    sed -i "/discovery.uri/d" /etc/trino/config.properties && 
                    echo discovery.uri=${DISCOVERY_URI} >> /etc/trino/config.properties && 
                    sed -i "/hive.metastore.uri/d" /etc/trino/catalog/hive.properties && 
                    echo hive.metastore.uri=${HIVE_METASTORE_URI} >> /etc/trino/catalog/hive.properties && 
                    sed -i "/node-scheduler.include-coordinator/d" /etc/trino/config.properties && 
                    echo node-scheduler.include-coordinator=${INCLUDE_COORDINATOR} >> /etc/trino/config.properties && 
                    /usr/lib/trino/bin/run-trino'
    healthcheck:
      test: /usr/lib/trino/bin/health-check 
      interval: 60s
      retries: 5
      start_period: 30s
      timeout: 30s

    depends_on:
       - hive-metastore  
       - trino-master
networks:
  trino-network-docker:
    name: trino-network-docker

docker compose 工作正常,但 Docker Swarm 服务名称有下划线,这会在其他容器中产生问题

docker stack deploy --compose-file swarm-compose.yml $COMPOSE_PROJECT_NAME

docker service ls
ID             NAME                          MODE         REPLICAS   IMAGE                                 PORTS
rr677zgjqw3n   docker-trino_hive-metastore 

下划线会破坏其他服务,所以我该怎么办,要么用连字符替换下划线

Trino 容器取决于 Hive Metastore URL 的名称,但 URL 中包含下划线会产生问题。

docker docker-compose docker-swarm
1个回答
0
投票

目前您无法将

_
替换为
-
,这就是 Docker Swarm(堆栈)的工作原理。堆栈中的服务名称模式:
<stack_name>_<service_name>
.

GitHub 上的

docker/cli
项目中有开放票证:https://github.com/docker/cli/issues/3364

作为解决方法,您可以使用网络别名:https://docs.docker.com/compose/compose-file/compose-file-v3/#aliases(如果您为您的服务创建网络别名,则其他服务会根据别名找到)

© www.soinside.com 2019 - 2024. All rights reserved.