gpt4 book ai didi

docker - 为什么 docker-compose 没有像预期的那样使用端口绑定(bind)?

转载 作者:可可西里 更新时间:2023-11-01 10:53:50 25 4
gpt4 key购买 nike

我正在使用这个 docker-compose 配置来运行经典的 nodejs 应用 + mysql + redis:

version: '3'

services:
app:
container_name: app
restart: always
build:
context: ./app/
depends_on:
- db
- redis
- elasticsearch
links:
- db
- redis
- elasticsearch
ports:
- "127.0.0.1:${APP_PORT}:${APP_PORT}"
environment:
- "PORT=${APP_PORT}"
- "MYSQL_PORT=${MYSQL_PORT}"
- "REDIS_PORT=${REDIS_PORT}"

redis:
container_name: redis
image: "redis:3-alpine"
restart: always
ports:
- "127.0.0.1:${REDIS_PORT}:6379"

db:
container_name: db
image: mariadb:10.0.30
restart: always
volumes:
- "${MYSQL_DATA_LOCATION}/data:/var/lib/mysql:delegated"
- "${MYSQL_DATA_LOCATION}/my.cnf:/etc/mysql/my.cnf:ro"
ports:
- "127.0.0.1:${MYSQL_PORT}:3306"
environment:
- "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}"
- "MYSQL_USER=${MYSQL_USER}"
- "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
- "MYSQL_DATABASE=${MYSQL_DATABASE}"

我还使用了一个包含以下值的 .env 文件:

APP_PORT=5000
MYSQL_PORT=3306
REDIS_PORT=6379

然后我开始应用

docker-compose up -d

这样一切都运行良好。我可以毫无错误地更改 mysql 端口,但是如果我将 redis 端口更改为原始端口以外的其他端口,则在使用此配置时,应用程序中会出现以下错误:

redis.createClient({host: 'redis', port: process.env.REDIS_PORT });

我收到以下消息:

Error: Redis connection to redis:5555 failed - connect ECONNREFUSED 172.18.0.3:5555

而数据库和应用程序之间的连接正常工作:s

在 docker ps 中我可以看到机器以预期的配置启动:

CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                                                NAMES
9c594c6d98b8 nginx:mainline-alpine "nginx -g 'daemon of…" 33 seconds ago Up 39 seconds 0.0.0.0:2000->80/tcp webproxy
62d1f917d7ff app "npm run docker-debug" 36 seconds ago Up 42 seconds 127.0.0.1:5000->5000/tcp, 127.0.0.1:9222->9222/tcp app
7c982d543a7d mariadb:10.0.30 "docker-entrypoint.s…" 39 seconds ago Up 45 seconds 127.0.0.1:4000->3306/tcp db
9dd13967b37d redis:3 "docker-entrypoint.s…" 39 seconds ago Up 44 seconds 127.0.0.1:5555->6379/tcp redis

我可以在这里看到数据库从 4000 映射到 3306,这有效,但是忽略了从 5555 到 6379 的 redis 映射。如果我手动将应用程序连接中的端口更改为端口 6379,它确实有效...

我的配置中是否缺少某些内容?

最佳答案

redis 在端口 6379 期间在容器内运行(如果您不更改其配置中的端口)。在您的主机上,您将端口 5555 映射到 redis 容器 6379。docker-compose 中的所有服务彼此可见,您甚至不需要将这些端口暴露给主机。在您的应用程序设置中,如果您通过 redis://redis:6379 访问 redis 将工作,或者使用公开的端口 redis://HOST_IP:5555 也将工作

关于docker - 为什么 docker-compose 没有像预期的那样使用端口绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48709862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com