Docker Compose - 我无法访问我的 Wordpress

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

我正在尝试构建三个相互交织的容器:MariaDB、Wordpress 和 Nginx。 目前,mariadb 正在运行,Wordpress 似乎也正常运行,因为它的所有数据都已放入数据库中。 但是,当我构建 nginx 时,不会出现任何错误,直到我尝试使用 http://localhost 或 http://domain_name 连接到 wordpress。一直提示无法连接。 这是我的 Docker-Compose:

services:
  mariadb:
    container_name: mariadb
    build: ./mariadb
    volumes:
      - mariadb_data:/var/lib/mysql
    env_file:
      - .env
    restart: on-failure
    networks:
      - inception

  wordpress:
    container_name: wordpress
    build: ./wordpress
    volumes:
      - wordpress_data:/var/www/html
    env_file:
      - .env
    restart: on-failure
    networks:
      - inception
    depends_on:
      - mariadb

  nginx:
    container_name: nginx
    build: ./nginx
    restart: on-failure
    networks:
      - inception
    depends_on:
      - wordpress

volumes:
  mariadb_data:
  wordpress_data:

networks:
  inception:

这是我的 Nginx Dockerfile:

FROM        debian:bullseye

EXPOSE      443

RUN         apt-get update \
            && apt-get install -y \
                nginx \
                openssl \
            && rm -rf /var/lib/apt/lists/*

RUN         openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
                -keyout /etc/ssl/private/nginx-selfsigned.key \
                -out /etc/ssl/certs/nginx-selfsigned.crt \
                -subj "/C=PT/ST=Porto/L=Porto/O=42/OU=42/CN=ataboada.42.fr"

COPY        files/nginx.conf /etc/nginx/nginx.conf

ENTRYPOINT  ["nginx", "-g", "daemon off;"]

这是我的 nginx-conf:

user                            www-data;
worker_processes                auto;
pid                             /run/nginx.pid;

events {
    worker_connections          1024;
}

http {
    include                     /etc/nginx/mime.types;
    default_type                application/octet-stream;
    sendfile                    on;
    keepalive_timeout           65;

    ssl_protocols               TLSv1.2 TLSv1.3;

    access_log                  /var/log/nginx/access.log;
    error_log                   /var/log/nginx/error.log;

    server {
        listen                  443 ssl;
        listen                  [::]:443 ssl;
        server_name             ataboada.42.fr;

        ssl_certificate         /etc/ssl/certs/nginx-selfsigned.crt;
        ssl_certificate_key     /etc/ssl/private/nginx-selfsigned.key;

        location / {
            proxy_pass          http://wordpress:9000;
            proxy_set_header    Host $host;
            proxy_set_header    X-Real-IP $remote_addr;
            proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header    X-Forwarded-Proto $scheme;
        }
    }
}

obs.:这是一项学校作业,所以我必须使用 debian:bullseye 作为图像

docker docker-compose nginx-config
1个回答
0
投票

您正在 nginx conf 上侦听端口 443:

    server {
        listen                  443 ssl;
        listen                  [::]:443 ssl;

但您没有在容器外部发布该端口。你可以这样做:

  nginx:
    ...
    ports:
      - 443:443

此外,

http://localhost
可能无法工作,除非您在某处启用了从 http 到 https 的重定向(某些浏览器可能会自动执行此操作)。
https://localhost
将使用正确的端口 443。

最后,您的

server_name ataboada.42.fr;
块在使用本地主机时无论如何都不起作用,因为它只会将请求流量路由到
https://ataboada.42.fr
。但是,您可以在同一配置中使用多个服务器名称:

server_name ataboada.42.fr 127.0.0.1 localhost;
© www.soinside.com 2019 - 2024. All rights reserved.