具有多个NGINX实例的Docker共享网络给出了随机的NGINX实例



我正在设置以下2个docker-compose文件:

version:  '3.7'
services:
    mysql:
        image: mysql:5.7
        restart: on-failure
        environment:
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        volumes:
            - db_data:/var/lib/mysql:rw
        ports:
            - '${MYSQL_PORT}:3306'
        networks:
            - shared_mysql
    php:
        build:
            context: .
            dockerfile: docker/php/Dockerfile
        restart: on-failure
        volumes:
            - '../:/usr/src/app'
        user: ${LOCAL_USER}
        networks:
            - shared_mysql
    api_nginx:
        image: nginx:1.15.3-alpine
        restart: on-failure
        volumes:
            - '../public/:/usr/src/app'
            - './docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro'
        ports:
            - '21180:80'
        depends_on:
            - php
        networks:
            - shared_mysql
    phpmyadmin:
        image: phpmyadmin/phpmyadmin
        restart: on-failure
        ports:
            - '${PHPMYADMIN_PORT}:80'
        environment:
            PMA_HOST: mysql
            MYSQL_USERNAME: ${MYSQL_USER}
            MYSQL_ROOT_PASSWORD: ${MYSQL_PASSWORD}
        networks:
            - shared_mysql
volumes:
    db_data:
networks:
    shared_mysql:
version:  '3.7'
services:
    php:
        build:
            context: .
            dockerfile: docker/php/Dockerfile
        restart: on-failure
        volumes:
            - '../:/usr/src/app'
        user: ${LOCAL_USER}
        networks:
            - api_21s_shared_mysql
    auth_nginx:
        image: nginx:1.15.3-alpine
        restart: on-failure
        volumes:
            - '../public/:/usr/src/app'
            - './docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro'
        ports:
            - '21181:80'
        depends_on:
            - php
        networks:
            - api_21s_shared_mysql
volumes:
    db_data:
networks:
    api_21s_shared_mysql:
        external: true

当我访问http://localhost:21181/时,我总是得到正确的网站。

但是,当我访问http://localhost:21182/,我得到http://localhost:21181/或http://http://localhost:21182/andand.

我试图设置网络分离。

我希望它可以与Portnumbers一起工作,但我不希望它们混合在一起。

我希望有人能帮助我。预先感谢您。

当服务开始使用Docker-compose时,它们在Docker网络中可以不同的方式在Docker网络中发现:按服务名称,通过容器名称,IP等

在您的情况下,您会使用"按服务名称"发现,因为在您的nginx配置中,您具有参考" php:9000"。

此时Docker寻找一个名为" PHP"的服务并找到2。它将它们解释为同一服务的副本,并按照圆形旋转模式将流量发送给他们(第一个请求服务的第一个请求,第二个请求,第二个请求到服务的第二个实例,第一个到第一个实例,第一个实例等(

(

解决方案

就像您已经使用nginx服务(auth_nginx和api_nginx(一样,以不同的方式命名服务。

然后在您的default.conf中,两种服务都会更改php:9000的行。

最新更新