Docker Nginx安装使用以及踩坑点总结

DockerNginx安装与配置常见问题及解决方案,
本文详细介绍了如何在Docker中安装和配置Nginx,包括拉取镜像、运行容器、挂载volume,以及处理因挂载文件而非文件夹导致的错误。还涉及后续SSL配置和容器操作命令的说明。

Docker Nginx安装使用以及踩坑点总结

拉取nginx镜像

docker pull nginx:latest

运行镜像

暂时不需要配置volume挂载

docker run --name nginx -p 80:80 -d nginx

参数详解:

--name nginx 指定容器的名称

-p 80:80 映射端口

-d 守护进程运行

创建volume目录

mkdir -p /www/nginx/conf
mkdir -p /www/nginx/conf.d 
mkdir -p /www/nginx/html
mkdir -p /www/nginx/log

拷贝nginx容器对应的文件默认配置(关键)

docker cp nginx:/etc/nginx/nginx.conf /www/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /www/nginx
docker cp nginx:/usr/share/nginx/html /www/nginx

注意: nginx.conf是文件,不是目录,很多的文章都没提到这个注意点,直接就创建了一个nginx.conf目录进行挂载。 如果nginx.conf是一个目录,在后面挂载的时候会报错。

报错信息:

[root@poloyy ~]# docker run -it -d -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
e0e4b40446a64927603b85854c3a6472b2dfa5681fcbfa0e170c16b15e5c8fdd
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting "/root/nginx.conf" to rootfs at "/etc/nginx/nginx.conf" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type.
[root@poloyy ~]# client_loop: send disconnect: Broken pipe

报错信息的意思:

 mounting "/root/nginx.conf" to rootfs at "/etc/nginx/nginx.conf" caused: mount through procfd: not a directory: unknown: Are you trying to mount a directory onto a file (or vice-versa)?
将“/root/nginx.conf”挂载到“/etc/nginx/nginx.conf”的rootfs导致:通过procfd挂载:不是目录:未知:您是否试图将目录挂载到文件上(反之亦然)

报错的原因是:

  • 不支持直接挂载文件,只能挂载文件夹

  • 想要挂载文件,必须宿主机也要有对应的同名文件

停止容器

docker stop nginx
docker rm nginx

重新运行镜像(挂载volume)

docker run --name nginx -p 80:80 --privileged --restart=always \
-v /www/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro \
-v /www/nginx/conf.d:/etc/nginx/conf.d:rw \
-v /www/nginx/html:/usr/share/nginx/html:rw \
-v /www/nginx/log:/var/log/nginx \
-d nginx

后续配置了SSL之后,需增加对端口443的监听,只需增加 -p 443:443 即可。

宿主机执行Nginx容器命令

  • 检查配置: docker exec -it nginx /bin/sh -c "nginx -t"

  • 重载配置: docker exec -it nginx /bin/sh -c "nginx -s reload"

原文链接

Docker Nginx安装使用以及踩坑点总结

Docker是一个开源的容器化平台,可以通过使用Docker容器来运行应用程序。Nginx是一个流行的Web服务器和反向代理服务器。Vue是一个流行的JavaScript框架,用于构建用户界面。跨域是指在浏览器中,当一个网页的脚本试图访问另一个源(域、协议或端口)的资源时,会触发跨域问题。解决Docker+Nginx+Vue跨域问题的一种方法是配置Nginx服务器的反向代理。具体步骤如下: 1. 在Docker使用Nginx作为前端代理。创建一个Dockerfile文件,指定基础镜像为Nginx,并将前端Vue项目的dist目录复制到Nginx的html目录下。同时,将自定义的nginx.conf文件复制到Nginx的配置目录中。这样可以将Vue项目通过Nginx进行访问。 2. 在Nginx的配置文件中,配置反向代理来解决跨域问题。在nginx.conf文件中,添加一个location配置块,将请求转发到后端接口的地址。可以使用proxy_pass指令来指定代理的地址。 3. 在Vue项目的代码中,确保请求的URL使用相对路径或者使用绝对路径加上Nginx代理的地址。这样可以保证请求会被发送到Nginx代理服务器,从而避免跨域问题。 通过以上步骤,你可以使用Docker部署Nginx和Vue项目,并且配置Nginx进行反向代理以解决跨域问题。这样就可以正常访问Vue项目了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [【笔记】【Docker + Nginx + Vue部署前端项目和跨域CORS解决](https://blog.youkuaiyun.com/m0_56555119/article/details/126785363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源分享汇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值