[英]How to network 2 separate docker containers to communicate with eachother?
我對 docker 很陌生,我嘗試過搜索網絡,但沒有找到有效的解決方案。
我有一個使用 Laradock 的 Laravel 應用程序。 我還有一個外部第 3 方 API,它在自己的 docker 容器中運行。 I basically want to specify the container name of the api inside my laravel.env file, and have it dynamically resolve the container ip so I can make API calls from my Laravel app. 我已經可以使用已經屬於 laradock 的服務(如 mariadb/mysql)來執行此操作,但是由於我的 API 位於外部容器中,因此無法連接到它。
我嘗試建立一個網絡並將它們連接起來;
docker network create my-network
然后在每個容器的docker-compose.yml
文件中,我指定了;
networks:
my-network:
name: "my-network"
但是,如果我嘗試用 ping 它們;
docker exec -ti laradock-workspace-1 ping my-api
我無法連接,也無法真正弄清楚為什么。 希望熟悉 docker 的人能夠解釋原因,因為我確信這是非常明顯的東西我錯過了。 謝謝!
默認情況下 Docker Compose 使用橋接網絡來提供容器間通信。 閱讀這篇文章,了解更多關於容器間網絡的信息。
對您來說重要的是,默認情況下 Docker Compose 會創建一個與docker-compose.yml
文件中的服務名稱相同的主機名。 考慮以下docker-compose.yml
:
version: '3.9'
services:
server:
image: node:16.9.0
container_name: server
tty: true
stdin_open: true
depends_on:
- mongo
command: bash
mongo:
image: mongo
environment:
MONGO_INITDB_DATABASE: my-database
當您運行docker-compose up
, Docker 將創建一個默認網絡並將服務名稱分配為mongo
和server
的主機名。
您現在可以通過以下方式訪問后端容器:
docker exec -it server bash
現在您可以使用 Dockers 內部網絡 ping mongo
容器(在這種情況下默認使用端口 27017):
curl -v http://mongo:27017/my-database
而已。 這同樣適用於您的設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.