Docker WordPress + mysql + phpmyadmin + nginx

问题描述 投票:0回答:1

我尝试为本地开发项目准备 docker-compose 文件,但我一直坚持为 phpmyadmin 设置域。

我将主机添加到 Windows 上的主机文件中。

127.0.0.1 phpmyadmin.test
127.0.0.1 wordpress1.test
127.0.0.1 worpresss2.test

我的 dev 文件夹的结构:

dockerfiles/
   |-wordpress1
     - Dockerfile
   |-wordpress2
     - Dockerfile
.docker/nginx/conf.d/
   - nginx.conf
   - phpmyadmin.conf
sites/
docker-compose.yml

docker-compose.yml:

version: '3.7'

services:
  # Nginx Service
  nginx:
    image: nginx:1.17-alpine
    ports:
      - 80:80
    volumes:
      - ./sites:/var/www/html
      - ./.docker/nginx/conf.d:/etc/nginx/conf.d:ro
      - phpmyadmindata:/usr/src/phpmyadmin:ro
    depends_on:
      - mysql
      - phpmyadmin


  # Database
  mysql:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    volumes:
      - mysql:/var/lib/mysql


  # phpmyadmin
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:5-fpm-alpine
    restart: always
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - phpmyadmindata:/usr/src/phpmyadmin
    depends_on:
      - mysql

  #wordpress1
  wordpress1:
    build: ./.docker/dockerfiles/wordpress1
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    volumes:
      - ./sites/wordpress1:/var/www/html/wordpress1

  #wordpress2
  wordpress2:
    build: ./.docker/dockerfiles/wordpress2
    restart: always
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_NAME: wordpress2
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    volumes:
      - ./sites/wordpress2:/var/www/html/wordpress2

volumes:
  phpmyadmindata:
  mysql:

wordpress1 的 dockerfile:

FROM  wordpress:5.5.1-php7.4-fpm
WORKDIR /var/www/html/wordpress1

wordpress2 的 dockerfile:

FROM  wordpress:5.5.1-php7.4-fpm
WORKDIR /var/www/html/wordpress2

nginx.conf

server {
    listen 80;
    listen [::]:80;

    server_name wordpress1.test;
    root /var/www/html/wordpress1;

    index index.php;
  
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_pass wordpress1:9000;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff|woff2)$ {
        expires max;
        log_not_found off;
    }
}

server {
    listen 80;
    listen [::]:80;

    server_name wordpress2.test;
    root /var/www/html/wordpress2;

    index index.php;
  
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_pass wordpress2:9000;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff|woff2)$ {
        expires max;
        log_not_found off;
    }
}

和我的 phpmyadmin.conf

server {
    listen      80;
    listen      [::]:80;
    server_name phpmyadmin.test;
    root        /usr/src/phpmyadmin;
    index       index.php;

    location ~* \.php$ {
        fastcgi_pass   phpmyadmin:9000;
        include        fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME     $fastcgi_script_name;
    }
}

因此,域:wordpress1.test 和 wordpress2.test 运行良好 但是当我去 phpmyadmin.test 时,我收到 403 错误,我不知道为什么。 你能帮我吗?

顺便说一句。为什么我必须使用构建 Dockerfiles 而不是写入: 图片:wordpress:5.5.1-fpm

wordpress docker nginx phpmyadmin virtualhost
1个回答
0
投票

我认为 phpmyadmin、wordpress1 和 wordpress2 都使用相同的默认端口 80。

尝试修改 compose 文件,为这三个容器分配唯一的端口。 例如,

ports:     #for wordpress1 container
  - 81:80  
ports:     #for wordpress2 container
  - 82:80  
ports:     #for phpmyadmin container
  - 83:80  

最后编辑 nginx 配置文件以反映这些端口 [81,82 和 82]。

© www.soinside.com 2019 - 2024. All rights reserved.