Как можно настроить Nginx внутри Docker-контейнера?

Я пытаюсь развернуть WordPress с использованием Docker и Nginx, но сталкиваюсь с проблемой: Nginx постоянно перезагружается и не работает. Можете подсказать, в чем может быть ошибка? Вот мой файл конфигурации: <br/> <pre><code>version: '3.9'

services:
  mysql:
    image: mysql:8.0
    container_name: shop-mysql
    restart: always
    ports:
      - 3306:3306
    volumes:
      - "./.srv/database:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: shop
      MYSQL_USER: user
      MYSQL_PASSWORD: user

  wordpress:
    image: wordpress:php8.2-fpm-alpine
    container_name: shop-wordpress
    depends_on:
      - mysql
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_USER: user
      WORDPRESS_DB_PASSWORD: user
      WORDPRESS_DB_NAME: shop
      WORDPRESS_DEBUG: 1
    volumes:
      - ./.srv/wordpress/:/var/www/html
      - ./theme/:/var/www/html/wp-content/themes/ale
      - ./plugin/:/var/www/html/wp-content/plugins/ale-core
      - ./.srv/custom.ini:/usr/local/etc/php/conf.d/custom.ini

  nginx:
    image: nginx:1.15.12-alpine
    container_name: shop-nginx
    restart: always
    depends_on:
      - wordpress
    ports:
      - 8000:80
    volumes:
      - ./.srv/nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./.srv/wordpress/:/var/www/html
      - ./public:/var/www/html
 
networks:
  main:
    name: shop
    external: true</code></pre> <br/> <br/> <pre><code>server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass wordpress:9000;
        fastcgi_param SCRIPT_FILENAME /var/www/h
  • 6 декабря 2024 г. 13:04
Ответы на вопрос 1
Похоже, у вас могут быть проблемы с конфигурацией Nginx или с маршрутизацией между вашими контейнерами. Давайте проверим несколько моментов:

1. **Проверка конфигурации Nginx**: Убедитесь, что ваш файл конфигурации `nginx.conf` правильно настроен. Вот пример, как может выглядеть законченный файл конфигурации для вашего случая:

   ```nginx
   server {
       listen 80;
       server_name localhost;

       root /var/www/html;
       index index.php index.html;

       location / {
           try_files $uri $uri/ /index.php?$args;
       }

       location ~ \.php$ {
           include fastcgi_params;
           fastcgi_pass wordpress:9000;  # Здесь ваш контейнер с Wordpress
           fastcgi_index index.php;
           fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
           include fastcgi_params;
       }

       location ~ /\.ht {
           deny all;
       }
   }
   ```

   Убедитесь, что имя сервиса `wordpress` правильно указано в `fastcgi_pass` и что `SCRIPT_FILENAME` тоже правильно задан.

2. **Проблема с доступом к WordPress**: Убедитесь, что ваш контейнер с WordPress действительно слушает на порту 9000. Вы можете проверить это, запустив команду `docker logs shop-wordpress` для просмотра логов контейнера.

3. **Пути монтирования и прав доступа**: Убедитесь, что монтируемые директории существуют и имеют правильные права доступа. Docker контейнеры могут не видеть содержимое, если права доступа на хосте неправильно настроены.

4. **Сеть**: Вы задаете внешнюю сеть для вашего приложения. Проверьте, что сеть `shop` существует и правильно настроена. Если у вас нет необходимости использовать внешнюю сеть, вы можете удалить раздел с сетями и позволить Docker создать сеть по умолчанию.

5. **Логи Nginx**: Проверьте логи контейнера Nginx для получения подробной информации об ошибках. Команда `docker logs shop-nginx` может предоставить полезную информацию о том, почему Nginx не запускается.

6. **Дополнительные зависимости**: Возможно, вам стоит добавить зависимости в `depends_on`, если другие контейнеры не успевают запуститься вовремя.

Попробуйте внести эти изменения и проверки. Если проблема останется, дайте знать, укажите логи контейнеров, чтобы можно было более точно выявить причины неисправностей.
Похожие вопросы