我在Windows Home Edition上使用docker工具带。我正在尝试使用docker- compose将Node与Redis一起使用,当我使用来运行映像docker-compose up(在同一源目录中)时,它运行良好,但是当我尝试使用来运行docker run -it myusername/myimageNode时,我的Node应用程序不是’无法连接到Redis。
docker-compose up
docker run -it myusername/myimage
抛出:
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' }
我相信这是因为我的节点应用程序无法找到Redis,即使当我使用该应用程序正在运行时docker-compose up,我也无法在相应的端口(即localhost:3000)上访问它。
这是我的docker-compose.yml
version: '3' services: my_api: build: . ports: - "3000:3000" image: my_username/myimage links: - redis-server:redis-server redis-server: image: "redis:alpine"
我面临两个问题,我相信它们都是相互关联的。
编辑
这可能是由于Windows Home Edition的虚拟化问题造成的吗?因为它不使用Hyper V,所以我只是尝试使用docker,所以我对此不太了解,但是David的回答很有道理,可能是由于各种网络,我需要连接到有效的网桥或者。
这就是我做的事 docker network ls
docker network ls
NETWORK ID NAME DRIVER SCOPE 5802daa117b1 bridge bridge local 7329d018df1b collect_api_mod_default bridge local 5491bfee5551 host host local be1353789426 none null local
当您在同一docker- compose.yml文件中运行整个堆栈时,Compose会自动为您创建一个Docker网络,这将使跨服务DNS请求正常工作。
docker- compose.yml
如果您尝试手动创建docker run一个容器,并且根本不指定任何--net选项,那么您会得到Docker称为默认桥接网络的东西,这显然没什么用处。您需要确保您的容器与Redis服务器连接到相同的Docker内部网络。
docker run
--net
您可以运行docker network ls以获取Docker网络列表。鉴于该docker- compose.yml文件,可能会有一个名为的文件source_directory_default。使用该名称并将其传递给您的docker run命令(在图像名称之前)
source_directory_default
docker run --net source_directory_default -p 3000:3000 my_username/my_api