[英]Can't debug when using `docker-compose run`, but `docker-compose up` works
[英]Docker: Not able to connect to Redis when using docker run instead of docker-compose up
我在 windows 家庭版上使用 docker 工具帶。 I'm trying to use Node with Redis using docker-compose, it is working well when I'm running the image using docker-compose up
(in the same source directory), but when I try to run it using docker run -it myusername/myimage
,我的 Node 應用程序無法連接到 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'
}
我相信這是因為我的節點應用程序無法找到 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 家庭版的虛擬化問題嗎? 因為它不使用 Hyper V,我剛剛嘗試過 docker 所以我不太了解,但大衛的回答很有意義,可能是因為各種網絡,我需要連接到有效的網橋或者。
這是我做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 run
容器,並且根本沒有指定--net
選項,那么您會得到 Docker 調用默認橋接網絡的東西,這顯然不太有用。 您需要確保您的容器連接到與 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.