直接執行啟動命令會失敗
pull鏡像:
然后執行啟動命令:
docker?run?-d?-p?80:80?-p?443:443?--name?nginx? -v?/mydata/nginx/html:/usr/share/nginx/html? -v?/mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf? -v?/mydata/nginx/conf/conf.d:/etc/nginx/conf.d? -v?/mydata/nginx/logs:/var/log/nginx? -v?/mydata/nginx/cache:/var/cache/nginx? --restart=always?nginx
如果/mydata/nginx/conf/nginx.conf文件不存在,這里會出現docker報錯,因為docker不允許綁定不存在的文件。
而直接新建一個空的/mydata/nginx/conf/nginx.conf雖然docker不會報錯,但是nginx卻無法在容器中正常啟動,通過docker ps -a命令查看,nginx會處于exit或者一直restart狀態,因為nginx的運行依賴于nginx.conf這個配置文件中的相關配置。
解決思路及辦法
先運行一個容器,不使用-v綁定,然后將容器中的相關文件直接copy到指定位置,之后就可以刪除容器,直接運行之前的啟動命令了。
具體操作如下:
首先創建好相關文件夾:
mkdir?-p? /mydata/nginx/html? /mydata/nginx/conf? /mydata/nginx/logs? /mydata/nginx/cache
跑起來一個nginx容器:
docker?run?-d?--name?nginx?nginx
復制配置文件和文件夾到宿主機指定目錄:
docker?cp?nginx:/etc/nginx/nginx.conf?/mydata/nginx/conf/ docker?cp?nginx:/etc/nginx/conf.d?/mydata/nginx/conf.d
刪除原容器:
docker?rm?-f?nginx
運行啟動命令,-v綁定相關卷:
docker?run?-d?-p?80:80?-p?443:443?--name?nginx? -v?/mydata/nginx/html:/usr/share/nginx/html? -v?/mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf? -v?/mydata/nginx/conf/conf.d:/etc/nginx/conf.d? -v?/mydata/nginx/logs:/var/log/nginx? -v?/mydata/nginx/cache:/var/cache/nginx? --restart=always?nginx
移動copy的conf.d目錄中的文件到正確的位置:
?mv?/mydata/nginx/conf.d/*?/mydata/nginx/conf/conf.d/ ?rm?-rf?/mydata/nginx/conf.d
這樣nginx容器就可以正常運行,并且我們通過上面的操作將nginx.conf文件和conf.d目錄都映射到了宿主主機上,以后需要修改nginx.conf文件或者為conf.d添加.conf文件都只需要在宿主機上的對應位置操作即可。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END