Не могу использовать Docker для проекта PHP - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь использовать докер, потому что он мне понадобится на работе для laravel, и я пытаюсь привыкнуть к нему.Я создал файл docker и вставил его из учебника, который нашел в Интернете:

FROM php:5.6.30-fpm-alpine

RUN apk update && apk add build-base

RUN apk add postgresql postgresql-dev \
    && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
  && docker-php-ext-install pdo pdo_pgsql pgsql

RUN apk add zlib-dev git zip \
  && docker-php-ext-install zip

RUN curl -sS https://getcomposer.org/installer | php \
        && mv composer.phar /usr/local/bin/ \
        && ln -s /usr/local/bin/composer.phar /usr/local/bin/composer

COPY . /app
WORKDIR /app

RUN composer install --prefer-source --no-interaction

ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}"

Я создал файл docker-compose.yml и вставил его:

version: '2'
services:
  nginx:
    image: nginx:1.11.10-alpine
    ports:
      - 3000:80
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
  web:
    build: .
    ports:
      - 9000:9000
    volumes:
      - .:/app
      - /app/vendor
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgres://todoapp@postgres/todos
  postgres:
    image: postgres:9.6.2-alpine
    environment:
      POSTGRES_USER: todoapp

  POSTGRES_DB: todos

Я делаю docker-compose up-d и, похоже, работает, но если я попытаюсь сделать docker-compose ps, у меня не будет никаких портов в первой строке, и в состоянии у меня будет выход 1

enter image description here

Когда я пытаюсь перейти на localhost:3000/todos, он говорит, что страница не найдена.Если я пытаюсь сделать curl localhost:3000/todos, он говорит, что соединение отказано .... Что мне делать?

РЕДАКТИРОВАТЬ:

. / Nginx.conf:

server {
  listen  80;
  error_log  /var/log/nginx/error.log;
  access_log /var/log/nginx/access.log;
  root /app/public/;

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

  location ~ ^/.+\.php(/|$) {
      fastcgi_pass web:9000;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  }
}

и журналы: enter image description here

текст:

nginx_1     | 2019/02/13 14:30:19 [emerg] 1#1: host not found in upstream "web" in /etc/nginx/conf.d/default.conf:12
nginx_1     | nginx: [emerg] host not found in upstream "web" in /etc/nginx/conf.d/default.conf:12

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема, похоже, только в том, что nginx запускается до того, как php будет готов.Чтобы проверить это, просто запустите docker-compose up -d еще раз.

Простое добавление зависимого_на веб-сервису должно помочь вам как правильное решение.(Также увеличьте версию до 2.4, которая является самой последней версией v2 docker-compose)

version: '2.4'
services:
  nginx:
    depends_on:
      - web

Это заставит docker-compose запустить контейнер php перед контейнером nginx.Однако он не будет ждать, когда Postgres будет готов.В этом случае это не должно быть проблемой, потому что php запускается очень быстро.

Если вы хотите что-то более солидное, или вы не можете добиться успеха, вы можете добавить сценарий обтекания точки входа в свой контейнер.Чтобы узнать больше, перейдите по ссылке https://docs.docker.com/compose/startup-order/. Также есть ссылки на инструменты, поэтому вам не нужно писать собственный скрипт с нуля.

...