![](/img/trans.png)
[英]Docker-compose migrating from links to networking MongoDB database issue
[英]Links to container in networking with docker-compose
我的目標是使用 docker-compose 通過 URL 從另一個容器訪問一個容器。
所以,假設我有以下docker-compose.yml
文件
version: "3.8"
services:
web:
build: web
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres
ports:
- "8001:5432"
以及文件夾web
的 Dockerfile Dockerfile
FROM alpine:3.7
RUN ping postgres://db:5432
運行docker-compose build
返回
db uses an image, skipping
Building web
Step 1/2 : FROM alpine:3.7
---> 6d1ef012b567
Step 2/2 : RUN ping postgres://db:5432
---> Running in afbfcd27b340
ping: bad address 'postgres://db:5432'
Service 'web' failed to build : The command '/bin/sh -c ping postgres://db:5432' returned a non-zero code: 1
docker compose 中的網絡文檔( https://docs.docker.com/compose/networking/#links )指出:
每個容器現在都可以查找主機名 web 或 db 並取回相應容器的 IP 地址。 例如,web 的應用程序代碼可以連接到 URL postgres://db:5432 並開始使用 Postgres 數據庫。
連接到從服務數據庫獲得的容器的正確 URL 是什么?
在web
映像構建期間,您的db
容器不存在,因此此處使用 RUN 是錯誤的。
一種選擇是在 Dockerfile 中包含 CMD 命令,這將指示web
容器在每次啟動容器時運行ping
命令。
此外,我還調整了傳遞給ping
命令的參數。
因此, web
Dockerfile 將是:
FROM alpine:3.7
CMD ["ping", "db:5432"]
現在,在docker-compose build
和docker-compose up
,您將看到web
容器在 5432 部分 ping db
容器並收到響應。
docker-compose
啟動一個橋接網絡並將所有容器添加到該網絡中,以便它們可以相互通信。 每個容器的主機名與它們在 docker-compose 文件中的服務名稱相同。 主機名由內部 DNS 服務解析。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.