docker启动nginx,并挂载目录及docker容器中文乱码
1、首先下載docker的nginx鏡像
docker pull nginx2、查看下載完成的鏡像
docker images3、運行一個nginx的鏡像的實例
docker run --name nginx -p 8080:80 -d nginx:latest調用http://localhost/index.html 可以看到nginx的主頁,表示運行成功;
4、交互形式進入創建的mynginx容器
docker exec -it nginx /bin/bash在容器里,找到nginx的默認的配置文件,/etc/nginx/nginx.conf
可以看到,容器的nginx的配置文件,都是默認在容器里的/etc/nginx文件夾下,我們查看下nginx.conf內容,容器里,不支持vim操作;
cat nginx.conf配置文件內容如下:
user nginx; worker_processes 1;error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid;events {worker_connections 1024; }http {include /etc/nginx/mime.types;default_type application/octet-stream;log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log /var/log/nginx/access.log main;sendfile on;#tcp_nopush on;keepalive_timeout 65;#gzip on;include /etc/nginx/conf.d/*.conf; }默認的異常日志文件寫在/var/log/nginx/文件夾下,
最后一行,還導入了/etc/nginx/conf.d/*.conf配置文件。
查看/etc/nginx/conf.d/*.conf文件
可以看到,默認的靜態代理資源路徑是/usr/share/nginx/html;
現在我已經知道了nginx的默認的配置文件,在什么位置,還有內容是什么,默認的root目錄的位置,那么我們就可以把這些文件拷貝到物理機上的路徑上,然后使用 -v命令,把路徑掛載到物理機上的路徑上。
5、再次操作創建容器;操作如下:
退出容器,回到物理機上,命令如下:
exit在我的物理機下/mnt/nginx,創建3個文件夾以及一個nginx.conf,分別存放html文件,配置文件,以及日志文件,如圖所示:
拷貝容器中的對應的文件夾到物理機下對應的文件夾,大家可以對應自己的實際物理機目錄,命令如下:
##導入的配置文件目錄 ##默認的配置文件 ##html頁面所放的位置 ##日志文件 docker cp nginx:/etc/nginx/conf.d /mnt/nginx docker cp nginx:/etc/nginx/nginx.conf /mnt/nginx/nginx.conf docker cp nginx:/usr/share/nginx/html /mnt/nginx docker cp nginx:/var/log/nginx /mnt/nginx/log刪除nginx鏡像的mynginx容器
docker rm -f nginx重新執行run命令,掛載對應的文件到物理機
注意!注意!注意!:
啟動nginx容器時 一定要加 --net host 參數 (解釋:容器將不會虛擬出自己的網卡,配置自己的IP等,而是使用宿主機的IP和端口。)
個人理解:如果不加此參數,nginx相當于是代理nginx鏡像的IP及端口,因為nginx鏡像也是獨立的虛機,貼上此圖,便于理解
我看了這篇文章,才知道,之前部署老是不成功,沒有跳轉,感謝大佬。
6、測試演示
http://localhost/index.html
打開url顯示nginx的主頁面
6.1、修改本地物理機掛載的html頁面所在的位置,修改index.html頁面內容
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> </head> <body> <h1>Welcome to nginx!</h1> <h1>歡迎nginx主頁</h1> </body> </html>刪除不要內容,只保留兩行標簽,一行中文,一行英文;再次刷新頁面;發現文件目錄掛載成功了,但是有中文亂碼;
這是因為nginx使用的Linux是閹割版的,字符集跟文件字符集不匹配;
6.2、交互進入nginx的容器中,查看容器默認編碼
docker exec -it nginx /bin/bash查看默認編碼
locale查看可以用的編碼
locale -a只要修改默認的編碼格式,設置成UTF-8就可以了;不過容器里,沒有vim指令,我們直接再創建容器的時候,指定一下環境變量,設置一個字符集;
6.3、最終的創建指令
docker run --name nginx -p 8080:80 --net host\ -v /mnt/nginx/conf.d:/etc/nginx/conf.d \ -v /mnt/nginx/nginx.conf:/etc/nginx/nginx.conf \ -v /mnt/nginx/html:/usr/share/nginx/html \ -v /mnt/nginx/log:/var/log/nginx \ -e LANG=C.UTF-8 \ -e LC_ALL=C.UTF-8 \ -d nginx可以正常訪問了;
7、docker-compose.yml 腳本如下:
version: '3' services:nginx:image: nginx:latestcontainer_name: nginx_01volumes:- /mnt/nginx/conf.d:/etc/nginx/conf.d- /mnt/nginx/nginx.conf:/etc/nginx/nginx.conf- /mnt/nginx/html:/usr/share/nginx/html- /mnt/nginx/log:/var/log/nginxenvironment:- LANG=C.UTF-8- LC_ALL=C.UTF-8ports:- 8080:80總結
以上是生活随笔為你收集整理的docker启动nginx,并挂载目录及docker容器中文乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2025美妆行业科技应用前瞻报告
- 下一篇: 朝阳行业的鉴别方法