簡體   English   中英

如何將docker-compose連接到容器網絡和localhost網絡

[英]How to connect docker-compose to container network and localhost network

如何設置docker-compose文件以連接到內部容器網絡和外部localhost網絡?

我試圖在docker-compose中使用extra_hosts屬性,但無法獲得所需的結果

我的docker-compose包含以下內容:

version: '3.7'

    services:

        myapp1:
            container_name: 
                  myapp1
            hostname:
                  myapp1
            build: 
                  context: 
                       .
                  dockerfile: 
                       Dockerfile
            command: 
                  ["npm", "start"]
            networks:
                  - container_network # This is an internal container network

        myapp2:
             ... # Same idea as above
            networks:
                  - container_network # This is an internal container network

    networks: 

         container_network:
              name:
                   container_network
              driver: 
                   bridge

我也有一個獨立的服務,並使用以下命令運行它:

docker run --name standalone_service --network host

還有其他原因與我的問題無關,為什么standalone_service無法合並到docker-compose文件中。 因此,將此服務合並到docker-compose文件中並使用container_network並不是一種選擇。

我希望myapp1(它是內部container_network的一部分)能夠訪問主機網絡上的standalone_service。 我該怎么做呢?

假設您已將standalone_service作為--network host運行,它與--network host運行的任何其他進程都沒有區別,並且對從Docker容器中進行各種應答,我如何連接到[host]機器應適用您。

第二種更好的方法是在Docker Compose外部創建一個Docker網絡,並將另一個容器連接到該網絡

docker network create container_network
docker run --net container_network -p 8888:8888 --name standalone_service ...

完成后,您可以在docker-compose.yml聲明與外部網絡相同的網絡 您甚至可以將其defaultdefault網絡,從而不必手動配置其他服務即可使用它。

version: 3
services:
  myapp1:
    build: .
    ports: ['3000:3000']
    environment:
      MYAPP2_URL: 'http://myapp2/'
      STANDALONE_URL: 'http://standalone_service/'
    # gets `command:` from the Dockerfile
    # attaches to the `default` network
networks:
  default:
    external: true
    name: container_network

如果您不介意以相反的順序啟動並取決於實現細節,也可以“借用” Docker Compose創建的默認default網絡。

docker-compose up -d
docker run --net dirname_default -p 8888:8888 --name standalone_service ...

沒有“連接到外部localhost網絡”之類的東西。 每個網絡環境(主機,以及每個容器)分別具有自己的“本地網絡” 127.0.0.0/8; localhost被固定為IP地址127.0.0.1,並且始終表示“ me”; 在Docker上下文中,“特別是我從中調用的容器”。

暫無
暫無

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

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