Docker, Nginx, localhost не отвечает - PullRequest
0 голосов
/ 02 мая 2020

Надеюсь, у вас все хорошо в это время.

Я застрял в проблеме с моим изображением nginx + php, это мое первое изображение, которое я создаю с нуля (с помощью Google ), поэтому я не уверен, что все правильно.

Это изображение будет служить мне в нескольких домашних проектах, я использую это изображение в реестре контейнеров Gitlab.

Я использую этот Dockerfile:

FROM alpine:latest

COPY --from=library/docker:latest /usr/local/bin/docker /usr/bin/docker
COPY --from=docker/compose:latest /usr/local/bin/docker-compose /usr/bin/docker-compose


RUN adduser -S www-data -u 1000
RUN apk upgrade -U
RUN apk add --update --no-cache \
        git \
        bash \
        vim
RUN apk --update --no-cache add php7 php7-fpm php7-mysqli php7-json php7-openssl php7-curl \
    php7-zlib php7-xml php7-phar php7-intl php7-dom php7-xmlreader php7-ctype php7-session \
    php7-mbstring php7-gd nginx curl

RUN apk add --update --no-cache nginx supervisor

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

ENV COMPOSER_ALLOW_SUPERUSER=1
RUN composer global require "hirak/prestissimo:^0.3" --prefer-dist --no-progress --no-suggest --classmap-authoritative \
&& composer clear-cache
ENV PATH="${PATH}:/root/.composer/vendor/bin"

COPY config/nginx.conf /etc/nginx/nginx.conf

RUN mkdir -p var/cache var/log var/sessions \
&& chown -R www-data var

VOLUME /srv/api/var
VOLUME /var/www/html
VOLUME /var/www/src

COPY index.php /var/www/html/

COPY src/run.sh /run.sh
RUN chmod u+rwx /run.sh

EXPOSE 80

ENTRYPOINT [ "/run.sh" ]
CMD ["init"]

, который вызывает этот сценарий bash, для миграции Symfony:

#!/bin/bash

INIT=false
MIGRATION=false
CREATEDB=true

for DOCKER_OPTION in $@
do
    case "$DOCKER_OPTION" in
    init )
        INIT=true
        shift
        ;;
    migration )
        MIGRATION=true
        shift
        ;;
    with-existing-db )
        CREATEDB=false
        shift
        ;;
    * )
        break
        ;;
  esac
done

APP_ENV=${APP_ENV:-dev}

init_project () {
    composer install --prefer-dist --no-progress --no-suggest --no-interaction
    chmod +x bin/console && sync
    php bin/console assets:install

    if $CREATEDB
    then
        php bin/console doctrine:schema:update -f
        php bin/console doctrine:fixtures:load -n
    fi
}

if $MIGRATION;
then
    php bin/console doctrine:migrations:migrate --no-interaction -vvv
    chown -R www-data:www-data /srv/api/var/
fi

if $INIT;
then
    mkdir -p /var/nginx/client_body_temp
    chown www-data:www-data /var/nginx/client_body_temp
    mkdir -p /var/run/php/
    chown www-data:www-data /var/run/php/
    touch /var/log/php-fpm.log
    chown www-data:www-data /var/log/php-fpm.log

    if [ "$APP_ENV" != 'prod' ];
    then
        init_project
    fi
    exec supervisord --nodaemon --configuration="/etc/supervisord.conf" --loglevel=info
fi

exec "$@";

Запускается этим Docker -композицией:

version: "3.7"

services:
  lamp:
    build:
      context: .
      dockerfile: ./Dockerfile
    ports:
      - 80:80
    volumes:
      - .:/var/www/html/
      - ./src:/var/www/src/

При такой конфигурации Nginx:

user www-data;
worker_processes 4;
error_log /dev/stdout;
pid /tmp/nginx.pid;
events {
  worker_connections 1024;
}

http {
    types {
        text/html                             html htm shtml;
        text/css                              css;
        text/xml                              xml;
        image/gif                             gif;
        image/jpeg                            jpeg jpg;
        application/javascript                js;
        application/atom+xml                  atom;
        application/rss+xml                   rss;
        image/svg+xml                         svg;
    }

    client_body_temp_path /tmp/client_body;
    fastcgi_temp_path /tmp/fastcgi_temp;
    proxy_temp_path /tmp/proxy_temp;
    scgi_temp_path /tmp/scgi_temp;
    uwsgi_temp_path /tmp/uwsgi_temp;

    # mime types

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    server {
        listen 80;
        server_name localhost;
        root /usr/share/nginx/html;
        access_log /dev/stdout;
        error_log /dev/stdout;

        location / {
                    root /usr/share/nginx/html;
                    index index.html index.htm;
         }
    }

}

Кажется, все идет хорошо.

К сожалению, я не могу отобразить свой индекс. php (php_info).

Когда я делаю

curl -vvv http://localhost: 80

* Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.69.1
> Accept: */*
> 
* Recv failure: Connection reset by peer
* Closing connection 0
curl: (56) Recv failure: Connection reset by peer

И когда я делаю

curl -vvv http://localhost: 80 --trace-ascii dump.txt

== sync, corrected by elderman ==
== Info: Connected to localhost (::1) port 80 (#0)
=> Send header, 73 bytes (0x49)
0000: GET / HTTP/1.1
0010: Host: localhost
0021: User-Agent: curl/7.69.1
003a: Accept: */*
0047: 
== Info: Empty reply from server
== Info: Connection #0 to host localhost left intact

Я искал net, но мой навыки довольно ограничены в конфигурации nginx.

Есть ли у вас какие-либо идеи, чтобы представить мне.

1 Ответ

0 голосов
/ 02 мая 2020

спасибо за ваш ответ,

Для VIM он уже добавил сюда:

RUN apk add --update --no-cache \
        git \
        bash \
        vim

Итак, я пробую этот Dockerfile, без PHP / Composer (Это довольно минималистично? ):

FROM alpine:latest

COPY --from=library/docker:latest /usr/local/bin/docker /usr/bin/docker
COPY --from=docker/compose:latest /usr/local/bin/docker-compose /usr/bin/docker-compose

RUN adduser -S www-data -u 1000
RUN apk upgrade -U
RUN apk add --update --no-cache \
        git \
        bash \
        vim
RUN apk --update --no-cache add nginx curl

RUN apk add --update --no-cache nginx supervisor

COPY config/nginx.conf /etc/nginx/nginx.conf

RUN mkdir -p var/cache var/log var/sessions \
&& chown -R www-data var

VOLUME /srv/api/var
VOLUME /var/www/html
VOLUME /var/www/src

COPY index.php /var/www/html/

COPY src/run.sh /run.sh
RUN chmod u+rwx /run.sh

EXPOSE 80

ENTRYPOINT [ "/run.sh" ]
CMD ["init"]

Для

curl -vv http://localhost: 80

*   Trying ::1:80...
* Connected to localhost (::1) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.69.1
> Accept: */*
> 
* Recv failure: Connection reset by peer
* Closing connection 0

И для

curl -vv http://localhost: 80 --trace-ascii dump.txt

== Info:   Trying ::1:80...
== Info: Connected to localhost (::1) port 80 (#0)
=> Send header, 73 bytes (0x49)
0000: GET / HTTP/1.1
0010: Host: localhost
0021: User-Agent: curl/7.69.1
003a: Accept: */*
0047: 
== Info: Recv failure: Connection reset by peer
== Info: Closing connection 0

Что вы думаете?

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