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 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(如果您为您的服务创建网络别名,则其他服务会根据别名找到)