在一台独立的电脑(具有本地唯一可访问的 IP 192.168.1.148
),我有 3 个容器:docker_compose_ui
,docker_compose_web_console
&nginx
其中两个容器正在监听端口但尚未转发致主办方:
docker_compose_ui 5000/tcp
docker_compose_web_console 8888/tcp
Nginx 转发:
nginx 0.0.0.0:80->80/tcp, :::80->80/tcp
docker_compose_ui
&docker_compose_web_console
在网络上backbone
。
nginx
在网络上backbone
和outward
。
任何backbone
不打算进行主机转发,因此不对外开放。
任何outward
旨在进行主机转发,从而使公众可以访问。
编辑:澄清一下,当我说公开时,我只是指从主机向外,我实际上还没有通过路由器将任何端口转发到互联网。
如果我inspect
进入网络,backbone
我可以看到 IP 地址:
nginx 172.21.0.4/16
docker_compose_ui 172.21.0.2/16
docker_compose_web_console 172.21.0.3/16
如果我inspect
进入网络,我outward
可以看到 的 IP 地址mginx
。172.22.0.2/16
如果我从卷曲nginx
到docker_compose_ui
:
docker exec nginx curl http://docker_compose_ui:5000
我收到一个 HTML 响应,好的,因此docker_compose_ui
既可到达nginx
又可解析。
如果我这样做,docker exec nginx nginx -T
我可以看到配置正在由 nginx 加载(最后一条server
指令)。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# configuration file /etc/nginx/nginx.conf:
# /etc/nginx/nginx.conf
user nginx;
# Set number of worker processes automatically based on number of CPU cores.
worker_processes auto;
# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;
# Configures default error logger.
error_log /var/log/nginx/error.log warn;
# Includes files with directives to load dynamic modules.
include /etc/nginx/modules/*.conf;
# Uncomment to include files with config snippets into the root context.
# NOTE: This will be enabled by default in Alpine 3.15.
#include /etc/nginx/conf.d/*.conf;
events {
# The maximum number of simultaneous connections that can be opened by
# a worker process.
worker_connections 1024;
}
http {
# Docker dns resolver
resolver 127.0.0.11 ipv6=off;
# Includes mapping of file name extensions to MIME types of responses
# and defines the default type.
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Name servers used to resolve names of upstream servers into addresses.
# It's also needed when using tcpsocket and udpsocket in Lua modules.
#resolver 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001;
# Don't tell nginx version to the clients. Default is 'on'.
server_tokens off;
# Specifies the maximum accepted body size of a client request, as
# indicated by the request header Content-Length. If the stated content
# length is greater than this size, then the client receives the HTTP
# error code 413. Set to 0 to disable. Default is '1m'.
client_max_body_size 1m;
# Sendfile copies data between one FD and other from within the kernel,
# which is more efficient than read() + write(). Default is off.
sendfile on;
# Causes nginx to attempt to send its HTTP response head in one packet,
# instead of using partial frames. Default is 'off'.
tcp_nopush on;
# Enables the specified protocols. Default is TLSv1 TLSv1.1 TLSv1.2.
# TIP: If you're not obligated to support ancient clients, remove TLSv1.1.
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
# Path of the file with Diffie-Hellman parameters for EDH ciphers.
# TIP: Generate with: `openssl dhparam -out /etc/ssl/nginx/dh2048.pem 2048`
#ssl_dhparam /etc/ssl/nginx/dh2048.pem;
# Specifies that our cipher suits should be preferred over client ciphers.
# Default is 'off'.
ssl_prefer_server_ciphers on;
# Enables a shared SSL cache with size that can hold around 8000 sessions.
# Default is 'none'.
ssl_session_cache shared:SSL:2m;
# Specifies a time during which a client may reuse the session parameters.
# Default is '5m'.
ssl_session_timeout 1h;
# Disable TLS session tickets (they are insecure). Default is 'on'.
ssl_session_tickets off;
# Enable gzipping of responses.
gzip on;
# Set the Vary HTTP header as defined in the RFC 2616. Default is 'off'.
gzip_vary on;
# Helper variable for proxying websockets.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# Specifies the main log format.
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# Sets the path, format, and configuration for a buffered log write.
access_log /var/log/nginx/access.log main;
# Includes virtual hosts configs.
include /etc/nginx/sites-enabled/*;
}
# TIP: Uncomment if you use stream module.
#include /etc/nginx/stream.conf;
# configuration file /etc/nginx/mime.types:
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
# configuration file /etc/nginx/sites-enabled/_default.conf:
# This is a default site configuration which will simply return 404, preventing
# chance access to any other virtualhost.
server {
listen 80 default_server;
listen [::]:80 default_server;
# Everything is a 404
location / {
return 404;
}
# You may need this to prevent return 404 recursion.
location = /404.html {
internal;
}
}
# configuration file /etc/nginx/sites-enabled/docker_compose_ui.conf:
server {
listen 80;
#server_name localhost;
server_name _;
access_log /var/log/nginx/docker_compose_ui.access.log main;
location /docker-compose-ui/ {
proxy_pass http://docker_compose_ui:5000;
}
location /web-console/ {
proxy_pass http://docker_compose_web_console:8888;
}
location /web-console/exec {
proxy_pass http://docker_compose_web_console:8888;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
docker-compose 配置(两个独立的文件):
--- # docker-compose-ui.yml
version: "3.9"
services:
docker_compose_ui:
image: francescou/docker-compose-ui
container_name: docker_compose_ui
hostname: docker_compose_ui
restart: unless-stopped
working_dir: /opt/docker-compose-projects
environment:
- 'WEB_CONSOLE_PATTERN=/web-console/?cid={containerName}&cmd={command}'
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /opt/docker-compose-pojects:/data/docker/docker-compose-ui
networks:
- backbone
web_console:
image: bitbull/docker-exec-web-console
container_name: docker_compose_web_console
hostname: docker_compose_web_console
restart: unless-stopped
environment:
- 'CONTEXT_PATH=/web-console/'
read_only: true
volumes:
- /var/run/docker.sock:/var/run/docker.sock
networks:
- backbone
networks:
backbone:
external: true
--- # nginx.yml
version: "3.9"
services:
nginx:
image: nginx:mainline-alpine
container_name: nginx
restart: unless-stopped
volumes:
- /data/docker/nginx:/etc/nginx
- /var/log/nginx:/var/log/nginx
- /var/run:/var/run
- /var/cache/nginx
ports:
- "80:80"
networks:
- backbone
- outward
networks:
backbone:
external: true
outward:
external: true
从我的笔记本电脑执行操作http://192.168.1.148/
会返回标准的“Nginx 已安装消息”。
那么为什么http://192.168.1.148/docker-compose-ui/
我的笔记本电脑仅返回 HTTP 404 错误页?