Код: Выделить всё
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./:/var/www/html
- ./default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- api
links:
- api
api:
image: php:8.2-fpm
ports:
- "9000:9000"
volumes:
- ./:/var/www/html
Код: Выделить всё
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./:/usr/share/nginx/html
- ./default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- api
links:
- api
api:
image: php:8.2-fpm
ports:
- "9000:9000"
volumes:
- ./libs/php:/var/www/html
Второй вариант не позволит интерфейсу отправлять запросы к серверная часть php. Все, что вы получите, это постоянные ошибки о том, что файл не существует, 404 или 502. Почему? Нет ли у контейнеров возможности отправлять запросы друг другу без необходимости явного использования одних и тех же папок и файлов?
Код: Выделить всё
├── docker-compose.yaml
├── index.html
└── libs/
├── php/
│ ├── geocodeBackend.php # PHP files served by php-fpm
│ └── other_php_files.php
├── js/
│ └── jquery.js # JS, Css and html served by nginx
└── css/
└── styles.css
Написать:
Код: Выделить всё
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "80:80"
depends_on:
- api
links:
- api
develop:
watch:
- path: .
target: /usr/share/nginx/html
action: sync
api:
build:
context: .
dockerfile: Dockerfile
ports:
- "9000:9000"
Код: Выделить всё
FROM nginx:latest
COPY . /usr/share/nginx/html
COPY ./conf.d/ /etc/nginx/conf.d/
Код: Выделить всё
FROM php:8.2-fpm
WORKDIR /var/www/html
COPY . /var/www/html
Код: Выделить всё
$("#submit_1").on("click", () => {
const inputVal = $("#input_1").val();
$.ajax({
url: "/api",
dataType: "json",
data: {
searchTerm: inputVal,
},
method: "POST",
success: (results) => console.log(results),
error: (obj, details) => console.log(obj, details),
});
}
});
Код: Выделить всё
server {
index index.php index.html;
server_name api;
error_log /var/log/nginx/error.log debug;
root /usr/share/nginx/html;
index index.html index.htm;
location /api {
proxy_pass http://api:9000/;
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-Proto $scheme;
# Enable CORS headers
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods "POST, OPTIONS";
add_header Access-Control-Allow-Headers "Content-Type";
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass api:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
web-1 | 2024/11/03 00:58:59 [ошибка] 30#30: *5 Recv() не удалось (104: Сброс соединения одноранговым узлом) при чтении заголовка ответа из восходящего потока, клиент: 172.18.0.1, сервер: API, запрос: «POST /api HTTP/1.1», восходящий поток: «http://172.18.0.2:9000/», хост: «localhost», реферер: "http://localhost/"
web-1 | 172.18.0.1 - - [03.11.2024:00:58:59 +0000] "POST /api HTTP/1.1" 502 157 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64; rv: 132.0) Gecko/20100101 Firefox/132.0" "-"
Контейнер PHP-FPM имеет свой файл
Код: Выделить всё
root@124743cd5330:/var/www/html# ls
Dockerfile geocodeBackend.php
Код: Выделить всё
root@b4eba721669f:/usr/share/nginx/html# ls
50x.html compose.dev.yaml favicon.ico libs
README.Docker.md conf.d index.html root
Подробнее здесь: https://stackoverflow.com/questions/791 ... iles-match