我正在设置以下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的行。