편집 1

편집 1

Laravel 애플리케이션용 도커 컨테이너를 시작하려고 합니다.

편집하다

Dockerfile.nginx

FROM nginx:alpine

COPY ./nginx/my-site-config.conf /etc/nginx/conf.d/default.conf

nginx/my-site-config.conf

server {
 listen       8027;
 server_name  localhost;

 # handle .php
 location ~ \.php$ {
    # 404
    try_files                     $fastcgi_script_name =404;

    # default fastcgi_params
    include                       fastcgi_params;

    # fastcgi settings
    fastcgi_pass                  php-fpm-container:9000;
    fastcgi_index                 index.php;
    fastcgi_buffers               8 16k;
    fastcgi_buffer_size           32k;

    # fastcgi params
    fastcgi_param DOCUMENT_ROOT   $realpath_root;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/";
 }
}

docker-compose.yml

#Nginx Service <-- doesn't work
 #  webserver:
 #    build:
 #      context: .
 #      dockerfile: Dockerfile.nginx
 #    container_name: webserver
 #    restart: unless-stopped
 #    tty: true
 #    ports:
 #      - "8027:80"
 #      - "443:443"
 #    networks:
 #      - app-network

# works
webserver:
 image: nginx:alpine
 container_name: webserver
 restart: unless-stopped
 tty: true
 ports:
  - "8027:80"
  - "443:443"
 networks:
  - app-network

주석 처리된 코드가 시작되지 않습니다:-

여기에 이미지 설명을 입력하세요.

주석 처리되지 않은 코드를 사용하고 nginx:alpine이미지로 제공 - 서버 호스팅 nginx 스플래시 화면. 내 문제가 있는 것 같습니다 Dockerfile.nginx.

답변1

nginx:alpinenginx 구성 확인

docker run -it --rm nginx:alpine /bin/sh
/ # cd /etc/nginx
/etc/nginx # ls -l
total 44
drwxr-xr-x    2 root     root            24 Dec 17 15:01 conf.d
-rw-r--r--    1 root     root          1077 Dec 15 14:55 fastcgi.conf
-rw-r--r--    1 root     root          1007 Dec 15 14:55 fastcgi_params
-rw-r--r--    1 root     root          2837 Dec 15 14:55 koi-utf
-rw-r--r--    1 root     root          2223 Dec 15 14:55 koi-win
-rw-r--r--    1 root     root          5231 Dec 15 14:55 mime.types
lrwxrwxrwx    1 root     root            22 Dec 17 15:01 modules -> /usr/lib/nginx/modules
-rw-r--r--    1 root     root           646 Dec 15 14:55 nginx.conf
-rw-r--r--    1 root     root           636 Dec 15 14:55 scgi_params
-rw-r--r--    1 root     root           664 Dec 15 14:55 uwsgi_params
-rw-r--r--    1 root     root          3610 Dec 15 14:55 win-utf

이것은 기본 nginx.conf입니다.

/etc/nginx # cat nginx.conf 

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

폴더 안에는 conf.d기본 서버 구성이 있습니다

/etc/nginx # ls -l conf.d/
total 4
-rw-r--r--    1 root     root          1093 Dec 15 14:55 default.conf

아주 기본적인 서버 부분이 있습니다

/etc/nginx # grep -vE " *#|^ *$" conf.d/default.conf 
server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

보시다시피 정적 컨텐츠만 서버하도록 구성되어 있고, *.php지원되는 php-fpm으로 요청을 전달하는 부분은 없습니다.

일반적으로 이 파일을 교체해야 합니다(또는 더 많은 제어가 필요한 경우 완전히 덮어써야 합니다 nginx.conf).

최소한 PHP 요청을 백엔드로 리디렉션하려면 서버 구성에 섹션이 필요합니다.

    # handle .php
    location ~ \.php$ {
# 404
try_files                     $fastcgi_script_name =404;

# default fastcgi_params
include                       fastcgi_params;

# fastcgi settings
fastcgi_pass                  php-fpm-container:9000; # <--- this is the PHP-FPM container
fastcgi_index                 index.php;
fastcgi_buffers               8 16k;
fastcgi_buffer_size           32k;

# fastcgi params
fastcgi_param DOCUMENT_ROOT   $realpath_root;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/";
    }

이 웹사이트를 이용하시면 됩니다DO의 NGINX 구성 도구애플리케이션의 전체 구성을 위한 좋은 시작점을 만드는 데 도움이 되며, 이후 nginx:apline컨테이너에서 이를 재정의할 수 있습니다.

nginx 컨테이너와 php 컨테이너 모두 PHP 애플리케이션 파일에 액세스할 수 있어야 합니다.

편집 1

맞춤 nginx 이미지

FROM nginx:alpine

# If you have a bundle of config created by DO config file, 
# you can copy them all to overwrite all the settings.
# or use
# to overwrite a single file
# COPY my-site-config.conf /etc/nginx/conf.d/default.conf

nginx 이미지의 사용자 정의 버전을 사용하려면 docker-compose를 업데이트하세요.

version: '3'
services:

 #PHP Service
 app:
  build:
   context: .
   dockerfile: Dockerfile
  image: digitalocean.com/php
  container_name: app
  restart: unless-stopped
  tty: true
  environment:
    SERVICE_NAME: app
    SERVICE_TAGS: dev
  working_dir: /var/www
  networks:
   - app-network

 #Nginx Service
 webserver:
  build:
    context: .
    dockerfile: Dockerfile.nginx
  container_name: webserver
  restart: unless-stopped
  tty: true
  ports:
   - "8027:80"
   - "443:443"
  networks:
   - app-network

편집 2

Docker 작동 방식과 다중 컨테이너 환경에서 작업하는 방법에 대한 몇 가지 핵심 부분이 누락된 것 같습니다. 우선 다음과 같은 작업 템플릿으로 시작하는 것이 좋습니다.하나(바인드 마운트 지점이 무엇을 의미하는지 이해하려면 모든 페이지를 읽으십시오.) 바인드 마운트를 통해 app(PHP 컨테이너) webserver파일을 보고 액세스할 수 있기 때문에 이 템플릿은 새 컨테이너를 구축하지 않고도 PHP 구성 및 nginx를 재정의할 수 있는 옵션도 제공합니다.

version: '3'
services:

  #PHP Service
  app:
    build:
      context: .
      dockerfile: Dockerfile
    image: digitalocean.com/php
    container_name: app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      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
  webserver:
    image: nginx:alpine
    container_name: webserver
    restart: unless-stopped
    tty: true
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./:/var/www
      - ./nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - app-network

  #MySQL Service
  db:
    image: mysql:5.7.22
    container_name: db
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: laravel
      MYSQL_ROOT_PASSWORD: your_mysql_root_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

관련 정보