背景:
- 应用程序已经通过U盘传入到服务器中。可以参考通过U盘传数据到 kylin系统
- 应用由多独立的服务组合而成, 且都是以docker容器来提供服务。
- docker image有: nginx:1.15.11, 后端extract个镜像
- 两个容器:mynginx, extract都可以独立运行起来了,可独立验证通过。
部署目标:
让整个应用都跑起来。
坑点:
- 服务器未连接网络,未能找到物理网卡(ifconfig中,无 eth0 相关配置)
- 在配置 nginx.conf文件时, 配置代理使用了extract容器的名称和IP地址,都不行。
验证过程及解决方案如下:
将以上情形转移到windows10系统下, 验证结果如下
nginx.conf
file
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
types_hash_max_size 4096;
client_max_body_size 1024m;
keepalive_timeout 300;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
# location /api/ {
# proxy_pass http://extract:9999/;
# }
location /xpi/ {
# 1. 宿主机IP地址 不行,原因:127.0.0.1此时是容器的地址,而不是宿主机的。
proxy_pass http://127.0.0.1:7115/;
# 2. 不行,原因:0.0.0.0表示接受任何 IP 的请求,表示授权。而不是指定 IP。
# proxy_pass http://0.0.0.0:7115/;
# 3. extract容器的IP地址 不行, 原因: 宿主机的容器,不在同一个 network 下,不能互相访问
# proxy_pass http://172.19.0.3:7115/;
# 4. extract容器名称,也是服务名称 不行,原因: 宿主机的容器,不在同一个 network 下,不能互相访问
# proxy_pass http://extract:7115/;
# 5. extract容器名称,也是服务名称 不行,原因:未指定端口号
# proxy_pass http://extract/;
# 6.windown10的以太网适配器 vEthernet (Default Switch)IP地址 OK
# proxy_pass http://172.20.0.1:7115/;
# 7. windown10的以太网适配器 vEthernet (WSL): IP地址 OK
# proxy_pass http://172.23.64.1:7115/;
# 8. windown10的未知适配器 Mihomo: OK
# proxy_pass http://198.18.0.1:7115/;
# 9. windows及macos下,使用特殊的host OK
# proxy_pass http://host.docker.internal:7115/;
# 10. linux下 使用docker0的IP地址 在其它linux服务器上验证 OK
## 10.1 kylin服务器上,使用 nginx容器启动时, 若配置为 docker0的 IP 地址,依然不行。
# 11. 使用host网络 OK。
## 11.1 在 kylin 服务器下:
1. 将mynginx的docker-compose.yml文件中添加 `network_mode: host`
2. 使用docker0的IP地址,使用 127.0.0.1IP 地址
3. 重启mynginx容器。
4. 在网页上验证通过。
# 12. 将所有容器启动过程放到一个 docker-compose 文件下, A 容器调 B 容器的服务,则可以在 A 容器的配置文件(如环境变量)配置 B 容器的容器名(服务名,docker0的 IP 地址, 宿主机 IP 都可以的),宿主机 IP 不推荐使用。这会导致数据流还将从宿主机的网络中走一下,纯属浪费,但不知为啥,nginx服务的容器中,配置其它容器的 IP 地址不行。
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}