本地Docker Compose部署workers服务无法外部访问求助
问题描述
本地通过Docker Compose部署包含redis和workers的服务集群,配置了自定义网络office、端口映射及workers与redis的连接参数。期望通过127.0.0.1:15660或workers.office:15660访问workers服务的/metrics接口,但执行docker-compose run -e NUM_WORKERS=10 workers启动服务后,curl请求出现以下错误:
- 执行
curl 127.0.0.1:15660/metrics时,报错curl: (7) Failed to connect to 127.0.0.1 port 15658: Connection refused - 执行
curl workers.host:15658/metrics时,报错curl: (6) Could not resolve host: workers.host
相关docker-compose.yml配置:
version: "3.3" services: redis: image: redis networks: - office ports: - '6379:6379' workers: image: workers-image networks: - office environment: NUM_WORKERS: 10 REDIS_URI: 'redis://redis:6379' ports: - '15658-15680:15658-15680' depends_on: - redis
错误原因分析
1. 连接拒绝(127.0.0.1:15660无法访问)
docker-compose run启动的是临时容器,默认不会加载compose配置中ports字段的端口映射规则,因此本地主机无法通过127.0.0.1:15660访问到该临时容器。- 若要让临时容器启用端口映射,需添加
--service-ports参数,执行命令改为:docker-compose run --service-ports -e NUM_WORKERS=10 workers
2. 域名无法解析(workers.host无法访问)
- 首先是域名拼写错误:你预期的访问地址是
workers.office,但实际执行的是workers.host,导致域名无法识别。 - 其次,即便拼写正确为
workers.office,本地主机也无法直接解析Docker自定义网络内的服务名。workers服务名仅在office网络内部的容器之间可被解析,本地主机不属于该网络,必须通过127.0.0.1加对应端口(需端口映射生效)访问。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

