Приветствую!
На хосте с Ubuntu 20 поднят кластер из нескольких контейнеров, объединенных между собой в одну сеть.
Кластер представляет собой стек разработки nginx + php-fpm + mysql + memcached + redis.
Nginx "крутит" несколько "сайтов", их имена (test.local, project.loc и т. п.) прописаны в hosts-файле и спокойно открываются в браузере хоста. Но есть так же необходимость, чтобы эти имена были доступны из скриптов, размещенных на самих же этих "сайтах", чтобы выполнить, например,
getimagesize("http://project.loc/image.jpg");
или запустить приемочное тестирование REST API.
Грубо говоря, как сделать так, чтобы test.local, размещенный в кластере, "видел сам себя со стороны"?
Желательно без необходимости добавлять хосты вручную.
docker-compose
version: '3'
services:
#PHP
php:
build:
context: ./image/php/${PHP_VERSION}/.
image: openweb/php:${PHP_VERSION}
container_name: os-php${PHP_VERSION}
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./www:/var/www
- ./config/php/php.ini:/usr/local/etc/php/php.ini
- ./scripts:/bin/app
#Nginx Service
webserver:
image: nginx:alpine
container_name: os-nginx
restart: unless-stopped
tty: true
ports:
- "${WWW_PORT}:80"
- "${WWW_SECURITY_PORT}:443"
volumes:
- ./www:/var/www
- ./config/nginx/:/etc/nginx/conf.d/
- ./scripts:/bin/app
#MySQL Service
mysql:
image: mysql:5.7.24
container_name: os-mysql5.7.24
restart: unless-stopped
tty: true
ports:
- "${MYSQL_PORT}:3306"
volumes:
- ./db/mysql:/var/lib/mysql
- ./scripts:/bin/app
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_PASSWORD}"
SERVICE_TAGS: dev
SERVICE_NAME: mysql
#Redis Service
redis:
image: redis
container_name: os-redis
restart: unless-stopped
tty: true
ports:
- "${REDIS_PORT}:6379"
volumes:
- ./db/redis:/var/lib/redis
- ./scripts:/bin/app
environment:
- REDIS_REPLICATION_MODE=master
#Memcached
memcached:
image: memcached
container_name: os-memcached
restart: unless-stopped
tty: true
ports:
- "${MEMCACHED_PORT}:11211"
#Volumes
volumes:
dbdata:
driver: local