簡體   English   中英

如何將 2 個獨立的 docker 容器聯網以相互通信?

[英]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 將創建一個默認網絡並將服務名稱分配為mongoserver的主機名。

您現在可以通過以下方式訪問后端容器:

docker exec -it server bash

現在您可以使用 Dockers 內部網絡 ping mongo容器(在這種情況下默認使用端口 27017):

curl -v http://mongo:27017/my-database

而已。 這同樣適用於您的設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM