我正在尝试构建三个相互交织的容器: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 作为图像
您正在 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;