我有一个由Hugo生成的简单静态站点,正在将其构建到运行Nginx的Docker容器中。 Nginx在端口90上监听。我遇到奇怪的行为,其中某些链接试图打开container端口而不是主机端口(在localhost
的情况下为8000)。因此,例如,此链接:
<a href="/documents">Docs</a>
...。当鼠标悬停显示将尝试打开localhost:8000/documents
时,这是正确的,但是当单击鼠标时,它将尝试打开http://localhost:90/documents/
(如果我在浏览器中手动将URL更改为http://localhost:8000/documents/
,它反应很好。)
是什么让这个人变得更加陌生:
可能是什么原因造成的?我甚至不知道这种现象叫什么。 “主机/容器端口混乱”?
我确定这不是Nginx或Docker的错误配置。我在Dockerfile中正确暴露了端口90:
EXPOSE 90
[nginx.conf
设置为在该端口上侦听:
http {
include /etc/nginx/mime.types;
sendfile on;
server {
root /usr/share/nginx/html/;
index index.html;
server_name localhost;
listen 90;
}
}
而且我正在启动Docker容器,并将主机端口8000转发到Nginx正在监听的端口:
docker run --name my-simple-site -p 8000:90 -d simple-site
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de9cd1526034 simple-site "nginx -g 'daemon of…" 41 minutes ago Up 41 minutes 0.0.0.0:8000->90/tcp my-simple-site
奇怪的是,此问题的解决方法是将链接更改为直接指向文件:<a href="/documents/index.html">Docs</a>