Я тоже совсем недавно работаю с докером.
Поделюсь своим опытом.
Использую Docker-compose.
Например мне нужно для сайта, открыть внешний доступ, который крутится где-то там в докере.
# Development configuration
version: "3.1"
services:
app:
container_name: rusaddress.app
build:
context: .
dockerfile: ./docker/php/Dockerfile-dev
volumes:
- .:/www
- ./docker/php/log:/var/log
depends_on:
- db
links:
- db
expose:
- 9000
# Nginx api server
nginx-api:
container_name: rusaddress.nginx-api
restart: always
build: ./docker/nginx
volumes:
- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./docker/nginx/sites-enabled/vhost-api.rusaddress.conf:/etc/nginx/sites-enabled/vhost-api.rusaddress.conf
ports:
- "127.0.0.150:8090:90"
depends_on:
- app
expose:
- "90"
command: ["nginx", "-g", "daemon off;"]
...
Конфигурация сервера который крутится в докере
/docker/nginx/sites-enabled/vhost-api.rusaddress.conf
server {
listen 90;
client_max_body_size 208M;
access_log /var/log/nginx/api.access.log;
root /www/public;
location / {
try_files $uri $uri/ /api.php?$query_string;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index api.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Теперь у меня сайт доступен локально
по адресу
127.0.0.150:8090
Как я понял, у Вас именно с этим проблема.
Теперь нам как то нужно открыть внешний доступ, для этого делаем следующее...
На реальном хосте, настраиваем nginx
server {
listen %ip%:%httpport%;
server_name api.rusaddress.local;
access_log "%sprogdir%/userdata/logs/api.rusaddress.local.access.log combined";
error_log "%sprogdir%/userdata/logs/api.rusaddress.local.error.log error";
add_header "Access-Control-Allow-Origin" "*";
add_header "Access-Control-Allow-Headers" "Origin, X-Requested-With, Content-Type, Accept, Authorization";
add_header "Access-Control-Request-Methods" "GET, POST, OPTIONS";
location / {
proxy_pass http://127.0.0.150:8090;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
Обратите внимание на адрес
127.0.0.150:8090
Теперь сайт доступен по api.rusaddress.local
api.rusaddress.local <---- это ваш публичный адрес
В моём случае локальный, так как я это сделал для себя, для разработки.
Восстановил картину, как это будет работать на реальном сервере.