#php #docker #symfony #docker-compose
Вопрос:
Я обращаюсь с cURL
просьбой
curl -X 'POST'
'http://localhost:8013/api/superheros'
-H 'accept: application/json'
-H 'Content-Type: application/json'
-d '{
"name": "Clark Kent",
"slug": "supermman",
"featured": true,
"createdAt": "2021-10-11T11:48:22.366Z"
}'
к конечной точке API на моем локальном сервере выше. Я получаю сообщение об ошибке 502 bad gateway.
Я использую Docker для всех целей и задач.
докер-compose.yml
version: '3'
services:
#PHP Service
app1:
build:
context: .
dockerfile: Dockerfile
image: digitalocean.com/php
container_name: app1
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app1
SERVICE_TAGS: dev
working_dir: /var/www
volumes:
- ./:/var/www
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- app-network
#Nginx Service
webserver1:
image: nginx:alpine
container_name: webserver1
restart: unless-stopped
tty: true
ports:
- "8013:80"
- "443:443"
volumes:
- ./:/var/www
- ./nginx/conf.d/:/etc/nginx/conf.d/
networks:
- app-network
#MySQL Service
db1:
image: mysql:5.7.22
container_name: db1
restart: unless-stopped
tty: true
ports:
- "3318:3306"
environment:
MYSQL_DATABASE: rest_api
MYSQL_ROOT_PASSWORD: password
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- dbdata:/var/lib/mysql
- ./mysql/my.cnf:/etc/mysql/my.cnf
networks:
- app-network
#Docker Networks
networks:
app-network:
driver: bridge
#Volumes
volumes:
dbdata:
driver: local
Докерфайл
FROM php:7.4-fpm
# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update amp;amp; apt-get install -y
build-essential
libpng-dev
libjpeg62-turbo-dev
libfreetype6-dev
locales
libzip-dev
zip
jpegoptim optipng pngquant gifsicle
vim
unzip
git
curl
# Clear cache
RUN apt-get clean amp;amp; rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql zip exif pcntl
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Copy existing application directory contents
COPY . /var/www
# Copy existing application directory permissions
COPY --chown=www:www . /var/www
# Change current user to www
USER www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
app.conf
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ .php$ {
try_files $uri =404;
fastcgi_split_path_info ^(. .php)(/. )$;
fastcgi_pass app1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
Я читал, что люди говорят, что PHP-FPM
это не работает, но мой Dockerfile
явно использует его. Можете ли вы предложить какие-то подсказки?
Ответ №1:
Вы можете попытаться передать аргументы php-fpm
в свой файл Dockerfile, как показано ниже, и убедиться 9000
, что порт настроен в local.ini
CMD ["php-fpm", "-F", "-y", "/usr/local/etc/php/conf.d/local.ini"]
-F
силаphp-fpm
, действующая на переднем плане-y
разделите путь конфигурации
После изменения файла Dockerfile вам необходимо выполнить docker-compose build
перестройку образа docker
Комментарии:
1. То же самое, следуя за
docker-compose down/up
плохими воротами2. возможно, вы можете запустить
netstat -an
команду в контейнере php-fpm, чтобы проверить, работает ли php-fpm на порту 9000,3. Пожалуйста, посмотрите мою правку. Я нигде не вижу фигуры
9000
из предложенной вами команды?4. необходимо настроить порт 9000
php/conf.d/loca.ini
и обязательно перестроить образ докера после изменения файла докера5. У вас есть синтаксис для настройки порта 9000, пожалуйста?