Docker:使用docker run而不是docker-compose up时无法连接到Redis

时间:2019-09-20 11:18:17

标签: node.js docker redis docker-compose

我在Windows Home Edition上使用docker工具带。 我正在尝试使用docker-compose将Node与Redis结合使用,当我使用docker-compose up(在同一源目录中)运行映像时,它运行良好,但是当我尝试使用{{1 }},我的Node应用程序无法连接到Redis。

投掷:

docker run -it myusername/myimage

我相信这是因为我的节点应用程序无法找到Redis,即使使用Error: Redis connection to redis-server:6379 failed - getaddrinfo ENOTFOUND redis-server at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:26) { errno: 'ENOTFOUND', code: 'ENOTFOUND', syscall: 'getaddrinfo', hostname: 'redis-server' } 时该应用程序正在运行,我也无法在相应的端口(即本地主机)上访问它: 3000。

这是我的docker-compose.yml

docker-compose up

我面临着两个问题,我相信它们都是相互关联的。

编辑

这可能是由于Windows Home Edition的虚拟化问题造成的吗?因为它不使用Hyper V,所以我只是尝试使用docker,所以我对此不太了解,但是David的回答很有道理,可能是由于各种网络,我需要连接到有效的网桥大概。

version: '3' services: my_api: build: . ports: - "3000:3000" image: my_username/myimage links: - redis-server:redis-server redis-server: image: "redis:alpine"

是我得到的
docker network ls

1 个答案:

答案 0 :(得分:1)

当您在同一docker-compose.yml文件Compose automatically creates a Docker network for you中运行整个堆栈时,这将使跨服务DNS请求正常工作。

如果您尝试手动docker run容器,而根本不指定--net选项,那么您会得到Docker称之为default bridge network的东西,这显然要少得多有用。您需要确保您的容器与Redis服务器连接到相同的Docker内部网络。

您可以运行docker network ls以获得Docker网络列表;给定docker-compose.yml文件,可能会有一个名为source_directory_default的文件。使用该名称并将其传递给您的docker run命令(在图像名称之前)

docker run --net source_directory_default -p 3000:3000 my_username/my_api