如何解决如何使用另一个Docker容器作为主网站的子目录?
我对docker和container概念不熟悉,我想在port:3000上托管一个带有容器的react网站xyz.com,并且要将Admin子目录添加到xyz.com/Admin之类的主网站(xyz .com)是一个容器,/ Admin必须是另一个容器(总共2个容器)。请帮我解决这个问题(例如Dockerfile,代码或docker-compose中的更改)。
解决方法
您需要的是反向代理。反向代理将位于两个Web应用程序的前面,并将相应的路径映射到相应的容器。
在这里,我有一个使用docker-compose和nginx的简单示例。它启动了三个nginx容器,一个充当代理,另外两个仅充当您的Web应用程序(root和admin)
项目结构:
/simple-proxy-two-websites
├── docker-compose.yml
├── default.conf
在docker-compose定义中,我们将配置映射到反向代理中,并将侦听端口(80)映射到主机端口80。然后,我们仅设置了两个默认的nginx容器作为Web应用程序我们想要服务的。
docker-compose.yml
version: "3"
services:
reverse-proxy:
image: nginx
volumes:
- ./default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- "web-admin"
- "web-root"
ports:
- 80:80
web-root:
image: nginx
web-admin:
image: nginx
在nginx反向代理服务器配置中(取自docker映像随附的默认配置,删除了所有注释行),然后添加位置/admin
并更改位置/
下面。请注意,proxy_pass
参数是使用上面docker-compose定义中定义的服务名的URL。当容器位于同一网络(在本例中为默认桥接网络)上时,Docker通过允许我们使用服务名称来简化此操作。
default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web-root:80/;
}
location /admin {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://web-admin:80/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
使用此配置,nginx反向代理将进行内部网络转发,将请求转发到proxy_pass
中定义的/location
目的地-不必从外部可以到达目的地。 / p>
您可以以这个示例为例,并使用您的服务名称和特定端口对其进行更新-应该可以帮助您。
我还有一个完整的示例,其中我覆盖了index.html
和web-admin
容器的默认web-root
页面,以验证是否已到达正确的目的地。让我知道是否需要,然后将其在GitHub上的存储库中提供。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。