Не вижу порт nginx с помощью команды docker ps - PullRequest
0 голосов
/ 25 февраля 2020

У меня установлен и работает контейнер nginx (см. Рисунок ниже), но настроенный порт (8585) не отображается, в результате соответствующий проект symfony 4 не выполняется через localhost:8585

enter image description here

Вот nginx конфигурация в docker - composer .yml файле:

version: "3.6"

services: 

    #Core configuration

    php-fpm:
        container_name: ${CONTAINER_NAME}_php-fpm
        build:
            context: .
            target: base
        ports:
            - '${PHP_PORT}:9000'
        volumes:
            - './:${WORKPATH}:rw'
            - './docker/php/conf/dev/php.ini:/usr/local/etc/php/php.ini'
            #- './docker/php/conf/dev/php.ini:/usr/local/etc/php/php.ini'
        env_file:
            - .env    
        restart: always

    nginx:
        container_name: ${CONTAINER_NAME}_nginx
        image: nginx
        ports:
            - '${NGINX_PORT}:80'
        volumes:
            - './:${WORKPATH}:rw'
            - './docker/nginx/logs:/var/log/nginx'
            - './docker/nginx/conf/dev/api022020.conf:/etc/nginx/conf.d/default.conf'
            #- './docker/nginx/conf/dev/api022020.conf:/etc/nginx/conf.d/default.conf'
            - './docker/nginx/conf/core/nginx.conf:/etc/nginx/nginx.conf'
        links:
            - php-fpm
        env_file:
            - .env    
        expose:
            - 80    
        restart: always    

    # Frontend configuration
    node:
        container_name: ${CONTAINER_NAME}_node
        build: './docker/nodejs'
        ports:
            - '${NODE_PORT}:3000'
        entrypoint: "yarn watch"
        volumes:
            - './:/usr/src/app:rw'
        restart: always

    #DB configuration 
    # For dev environment coding
    mysql:
        container_name: ${CONTAINER_NAME}_mysql
        image: mysql:5.7
        ports:
            - '${MYSQL_PORT}:3306'
        environment:
            MYSQL_DATABASE: ${MYSQL_DATABASE}
            MYSQL_USER: ${MYSQL_USER}
            MYSQL_PASSWORD: ${MYSQL_PASSWORD}
            MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        volumes:
            - 'mysql:/var/lib/mysql'
        restart: always

    #For prod environment emulation    
    postgresql:
        container_name: ${CONTAINER_NAME}_pgsql
        image: postgres:9.6-alpine
        environment:
            PGSQL_DATABASE: ${PGSQL_DATABASE}
            PGSQL_USER: ${PGSQL_USER}
            PGSQL_PASSWORD: ${PGSQL_PASSWORD}
        ports:
            - '${PGSQL_PORT}:5432'
        volumes:
            - 'db-data:/var/lib/postgresql/data:rw'
        restart: always

    #Server optimization    
    redis:
        container_name: ${CONTAINER_NAME}_redis
        image: redis:alpine
        ports:
            - '${REDIS_PORT}:6379'
        links:
            - php-fpm
        restart: always    

volumes:
    db-data: {}
    mysql:                   



Пожалуйста, проверьте мой nginx .conf файл:

server {
    listen 80 default_server;       # Added this line
    listen [::]80 default_server;   # Added this line
    #server_name my-project.dev;

    root /var/www/api022020/public;

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

    #Prod
    location ~ ^/index\.php(/|$) {
        fastcgi_pass php-fpm:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }

    location ~ \.php$ {
        return 404;
    }

    error_log /var/log/nginx/api022020_prod_error.log;
    access_log /var/log/nginx/api022020_prod_access.log;
}

.env файл:

# In all environments, the following files are loaded if they exist,
# the latter taking precedence over the former:
#
#  * .env                contains default values for the environment variables needed by the app
#  * .env.local          uncommitted file with local overrides
#  * .env.$APP_ENV       committed environment-specific defaults
#  * .env.$APP_ENV.local uncommitted environment-specific overrides
#
# Real environment variables win over .env files.
#
# DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
#
# Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
# https://symfony.com/doc/current/best_practices.html#use-environment-variables-for-infrastructure-configuration

###> symfony/framework-bundle ###
APP_ENV=dev
APP_SECRET=5f41c23b077589c815d289434ec7aeb4
#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
#TRUSTED_HOSTS='^(localhost|example\.com)$'
###< symfony/framework-bundle ###

###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# For a PostgreSQL database, use: #"postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=11&charset=utf8"
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
# DATABASE_URL=mysql://root:password@127.0.0.1:3306/db_name?serverVersion=5.7
###< doctrine/doctrine-bundle ###

## Docker
CONTAINER_NAME=api022020
WORKPATH=/var/www/api022020
PHP_PORT=9500
NGINX_PORT=8585
REDIS_PORT=8283
NODE_PORT=8382
MAILDEV_PORT=1080
APACHE_PORT=8189

## MySQL
MYSQL_PORT=3306
MYSQL_DATABASE=api022020
MYSQL_USER=api022020
MYSQL_PASSWORD=api022020
MYSQL_ROOT_PASSWORD=api022020

## POSTGRESQL
PGSQL_PORT=5342
PGSQL_DATABASE=api022020
PGSQL_USER=api022020
PGSQL_PASSWORD=api022020


ОБНОВЛЕНИЕ:

Dockerfile:

FROM php:fpm-alpine as base

ENV WORKPATH "/var/www/api022020"
ENV COMPOSER_ALLOW_SUPERUSER 1

RUN apk add --no-cache --virtual .build-deps $PHPIZE_DEPS icu-dev postgresql-dev libzip-dev gnupg graphviz make autoconf git zlib-dev curl chromium go \
    && docker-php-ext-configure pgsql --with-pgsql=/usr/local/pgsql \
    && docker-php-ext-install zip intl pdo_pgsql pdo_mysql opcache json pgsql mysqli \
    && pecl install apcu redis \
    && docker-php-ext-enable apcu mysqli redis 

#Custom php configuration
COPY ./docker/php/conf/dev/php.ini /usr/local/etc/php/php.ini

#Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN wget https://cs.symfony.com/download/php-cs-fixer-v2.phar -o php-cs-fixer \
    && chmod a+x php-cs-fixer \
    && mv php-cs-fixer /usr/local/bin/php-cs-fixer \
    && curl --insecure -LS https://get.sensiolabs.de/deptrac.phar -o deptrac.phar \
    && chmod a+x deptrac.phar \
    && mv deptrac.phar /usr/local/bin/deptrac

RUN mkdir -p ${WORKPATH}    

RUN rm -rf ${WORKPATH}/vendor \
    && ls -l ${WORKPATH}

RUN mkdir -p ${WORKPATH}/var \
    && mkdir ${WORKPATH}/var/cache \
    && mkdir ${WORKPATH}/var/logs \
    && mkdir ${WORKPATH}/var/sessions \
    && chown -R www-data ${WORKPATH}/var \
    && chown -R www-data /tmp

RUN chown www-data:www-data -R ${WORKPATH}

WORKDIR ${WORKPATH}

COPY . ./        

EXPOSE 9000
CMD ["php-fpm"]

#Production environment
FROM base

COPY ./docker/php/conf/prod/php.ini /usr/local/etc/php/php.ini


ОБНОВЛЕНИЕ 2

patrick@patrick-VirtualBox:/var/www/api022020$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                          PORTS                               NAMES
0241c049f90c        redis:alpine          "docker-entrypoint.s…"   22 minutes ago      Up 22 minutes                   0.0.0.0:8283->6379/tcp              api022020_redis
a58155e52d7f        nginx                 "nginx -g 'daemon of…"   22 minutes ago      Up 5 minutes                    0.0.0.0:8585->80/tcp                api022020_nginx
3aab21fb15aa        postgres:9.6-alpine   "docker-entrypoint.s…"   22 minutes ago      Restarting (1) 46 seconds ago                                       api022020_pgsql
0cf51b9359a8        api022020_node        "yarn watch"             22 minutes ago      Restarting (1) 42 seconds ago                                       api022020_node
087648a69e68        8ee96c1a7995          "docker-php-entrypoi…"   22 minutes ago      Up 22 minutes                   0.0.0.0:9500->9000/tcp              api022020_php-fpm
7de9e9a59252        mysql:5.7             "docker-entrypoint.s…"   22 minutes ago      Up 22 minutes                   0.0.0.0:3306->3306/tcp, 33060/tcp   api022020_mysql


При попытке доступа localhost:8585, кажется, не работает:

This site can’t be reachedThe webpage at http://localhost:8585/ might be temporarily down or it may have moved permanently to a new web address.
ERR_SOCKET_NOT_CONNECTED

ОБНОВЛЕНИЕ 3

Получение Bad Request ошибка при замене nginx изображения на apache изображение следующим образом:

Bad Request
Your browser sent a request that this server could not understand.
Apache/2.4.7 (Ubuntu) Server at localhost Port 8189

Apache конфигурация контейнера:

# Apache
    apache:
        container_name: ${CONTAINER_NAME}_apache
        image: tutum/apache-php
        ports:
            - "${APACHE_PORT}:80"
        volumes:
            - '${WORKPATH}:/var/www'
            - './docker/php/conf/dev/php.ini:/etc/php5/apache2/conf.d/30-custom.ini'
            - './docker/apache/sites:/etc/apache2/sites-enabled'
        environment:
            - "ALLOW_OVERRIDE=true"
        links:
            - "mysql:mysql"
            - "maildev:maildev"
        env_file:
            - .env    
        restart: always 


    # Maildev
    maildev:
        image: djfarrelly/maildev
        ports:
            - "${MAILDEV_PORT}:80" 

Любой подсказки, как решить эту проблему? Заранее спасибо

1 Ответ

0 голосов
/ 25 февраля 2020

Может быть, забыл загрузить .env

php-fpm:
    ...
    env_file:   # <-- Add this
        - .env  # <-- Add this

nginx:
    ...
    env_file:   # <-- Add this
        - .env  # <-- Add this
    ..

Update1:

Убедитесь, что Dockerfile вам go EXPOSE 80

docker -compose.yml

nginx:
  ...
  expose:
    - 80
  ...

nginx .conf

server {
    listen 80 default_server;       # Add this line
    listen [::]:80 default_server;  # Add this line

    #server_name my-project.dev;

    root /var/www/api022020/public;

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

    #Prod
    location ~ ^/index\.php(/|$) {
        fastcgi_pass php-fpm:9000;
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;
        internal;
    }

    location ~ \.php$ {
        return 404;
    }

    error_log /var/log/nginx/api022020_prod_error.log;
    access_log /var/log/nginx/api022020_prod_access.log;
}

, если все еще не работает, не могли бы вы предоставить журналы из сбойного nginx контейнера docker-componse logs --tail=500

Update2 :

Как вы загружаете свой секрет в свою среду? для postgres, например

docker -compose.yml (читается https://hub.docker.com/_/postgres)

...
postgresql:
    container_name: ${CONTAINER_NAME}_pgsql
    image: postgres:9.6-alpine
    environment:
        POSTGRES_DB: ${PGSQL_DATABASE}          # <-- Change the left key
        POSTGRES_USER: ${PGSQL_USER}            # <-- Change the left key
        POSTGRES_PASSWORD: ${PGSQL_PASSWORD}    # <-- Change the left key

node:
    container_name: ${CONTAINER_NAME}_node
    build: './docker/nodejs'
    ports:
        - '${NODE_PORT}:3000'
    entrypoint: "yarn watch"                    # <-- change "entrypoint" by "command"
    volumes:
        - './:/usr/src/app:rw'
    restart: always
...

Обновили ли вы nginx .conf до слушать порт? (Я дал вам строки на update1)

Update3 :

Моя ошибка, синтаксическая ошибка:

listen [::]80 default_server; -> listen [::]:80 default_server;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...