簡體   English   中英

幾個php docker容器之間的通信

[英]Communication between several php docker containers

我有幾個php服務器,讓我們將它們命名為api1,api2。 我已經設置了docker-compose文件,該文件可以與nginx鏈接成功地運行它們,因此可以從主機訪問它們並且工作正常。

這是我的docker-compose.yml的示例:

version: "3.5"
services:
nginx:
    user: "root:root"
    image: nginx:stable
    container_name: nginx
    ports:
        - "80:80"
        - "443:443"
    volumes:
        - ./cert:/etc/nginx/ssl/
        - ./vhosts/:/etc/nginx/conf.d/:cached
        - ./logs/nginx:/var/log/nginx:cached
        - ${ACCOUNT_PATH}:/var/www/api1:cached
        - ${ACCOUNT_API_PATH}:/var/www/api2:cached
api1:
    image: php-fpm-image
    build:
        context: "."
        dockerfile: "./images/api1/Dockerfile"
    user: "root:root"
    container_name: account
    working_dir:  /var/www/api1/
    volumes:
        - api1path/:/var/www/api1
api2:
    image: php-fpm-image
    build:
        context: "."
        dockerfile: "./images/api2/Dockerfile"
    user: "root:root"
    container_name: api2
    working_dir:  /var/www/api2/
    volumes:
        - api2:/var/www/api2:cached
networks:
    default:
       name: domain.com
       driver: bridge

結合此docker-compose文件進行功能測試:

     version: '3.5'
     services:
        apitests:
           image: apitests:latest
           container_name: api_tests
           volumes:
             - ./config/:/opt/project/config/
             - ./test_reports/screenshots:/root/.selene/screenshots/
     networks:
       default:
       driver: bridge
       external:
          name: domain.com

可以從主機訪問下一個域:

api1.domain.com 127.0.0.1

api2.domain.com 127.0.0.1

我的問題是如何直接在docker內部連接它們,因為我需要執行從api1到api2,apitests到api1,api2的請求。

當我請求時,他們的域直接解析到他們的容器,所以我收到下一個錯誤

無法連接到遠程主機(172.21.0.8):連接被拒絕

從任何容器。

如您所知,我需要將它們的域解析為NGINX容器,以便它可以正常工作,並且php-fpm可以通過nginx將結果返回給我。

我怎樣才能做到這一點?

看來您的問題是,當您的要求是為nginx容器分配此域名時,您已將php容器命名為api1.domain.com。

您可以將api1 / api2別名分配給容器網絡內的nginx。

services:
   nginx:
      networks:
        default:
          aliases:
            - api1
            - api2

如果我docker-compose.yml正確,則您有幾個docker-compose.yml文件,需要它們提供服務才能進行交互。 邏輯建議是建立一個全球定義的網絡

docker network create testapis

並將所有服務鏈接到它:

泊塢窗,compose.yml

...
networks:
  default:
    external: 
      name: testapis

在這種情況下,所有docker-compose文件中的所有服務都將以其主機名( api1api2等) api1 api2 ,並且不需要暴露端口(除非您要使用此網絡外部的服務)

暫無
暫無

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

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