gpt4 book ai didi

docker - node.js docker容器与本地redis服务器(127.0.0.1)的连接

转载 作者:行者123 更新时间:2023-12-02 20:59:02 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





From inside of a Docker container, how do I connect to the localhost of the machine?

(36 个回答)


2年前关闭。




我在 docker 容器中运行 node.js 应用程序。这是我的 docker-compose 文件-

version: '3.7'
services:
notification-app:
container_name: ${CONTAINER_NAME}
build:
context: ./
dockerfile: ./Dockerfile
args:
- APP_ENV=${APP_ENV}
ports:
- ${EXPORTED_PORT}:${APP_PORT}
environment:
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}

这是我的 .env 文件 -
CONTAINER_NAME=sheba_socket

APP_ENV=development
APP_PORT=3000
EXPORTED_PORT=3000

REDIS_HOST=localhost
REDIS_PORT=6379

我在本地运行 REDIS SERVER(没有容器,直接在机器上)。
当我构建并运行这个容器时,我发现了这个错误。
[ioredis] Unhandled error event: Error: getaddrinfo ENOTFOUND redis
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:64:26)

我想,问题出在这里 REDIS_HOST=本地主机 .
我不知道如何定义 redis主机 .

最佳答案

您可以运行 notification-app使用 network_mode: "host" 在主机网络上提供服务
更新了 docker-compose.yml:

version: '3.7'
services:
notification-app:
container_name: ${CONTAINER_NAME}
build:
context: ./
dockerfile: ./Dockerfile
args:
- APP_ENV=${APP_ENV}
environment:
- REDIS_HOST=${REDIS_HOST}
- REDIS_PORT=${REDIS_PORT}
network_mode: "host" //Here is the change
您可能已经注意到我删除了 ports来自原始的 docker-compose 文件。这是因为当我们在主机网络上运行服务时,服务直接绑定(bind)到 Docker 主机上的端口。因此无需在主机网络中公开端口。
通过此更改,您无需更新 .env文件。 REDIS_HOST=localhost可以正常工作。
阅读有关 docker 主机网络的更多信息 here

关于docker - node.js docker容器与本地redis服务器(127.0.0.1)的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61391498/

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