首页 > 解决方案 > 使用 docker 和 nginx 在 5000 端口部署静态网站

问题描述

我尝试使用 docker 部署一个简单的静态index.htmlstyle.css网站。

server {

    #root /var/www/html;

    # Add index.php to the list if you are using PHP
    #index index.html index.htm index.nginx-debian.html;
    server_name data-mastery.com; # managed by Certbot

     location /blog {
       proxy_pass          http://127.0.0.1:5000;
     }

    listen 443 ssl; # managed by Certbot

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_certificate /etc/letsencrypt/live/data-mastery.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/data-mastery.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}


server {
    if ($host = data-mastery.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80 ;
    listen [::]:80 ;
    server_name data-mastery.com;
    return 404; # managed by Certbot
}

这是我的简单 Dockerfile:

FROM nginx:alpine
COPY . /usr/share/nginx/html

我使用以下命令启动了容器:

sudo docker run -p 5000:5000 blog

我不确定这条线是否意味着我运行时docker ps

80/tcp, 0.0.0.0:5000->5000/tcp

这里的一切是否正确?

如何让它在端口 5000 上运行?

谢谢!

标签: dockernginx

解决方案


更新的答案: 您的用例在nginx docker image documentation中得到解决,所以我将对其进行解释。

$ docker run --name my-blog -v /path/to/your/static/content/:/usr/share/nginx/html:ro -d nginx

或者,可以使用一个简单的 Dockerfile 来生成一个包含必要内容的新镜像(这是比上面的绑定挂载更简洁的解决方案):

FROM nginx
COPY . /usr/share/nginx/html

将此文件放在与 content 目录相同的目录中,运行docker build -t my-blog .,然后启动容器:

$ docker run --name my-blog -d my-blog

暴露外部端口

$ docker run --name some-nginx -d -p 8080:80 some-content-nginx

然后您可以在浏览器中点击http://localhost:8080http://host-ip:8080 。

初步答案: 您应该尝试以下方法:

sudo docker run -p 80:5000 blog

docker 将代理连接到 localhost:5000 到 your_container:80

在 your_container:80 上,nginx 正在监听并将代理到 your_container:500 您的博客正在回答

我希望这会有所帮助


推荐阅读