目錄
- 直接執(zhí)行啟動(dòng)命令會(huì)失敗
- 解決思路及辦法
- 總結(jié)
直接執(zhí)行啟動(dòng)命令會(huì)失敗
pull鏡像:
docker pull nginx
然后執(zhí)行啟動(dòng)命令:
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
文件不存在,這里會(huì)出現(xiàn)docker報(bào)錯(cuò),因?yàn)閐ocker不允許綁定不存在的文件。
而直接新建一個(gè)空的/mydata/nginx/conf/nginx.conf
雖然docker不會(huì)報(bào)錯(cuò),但是nginx卻無法在容器中正常啟動(dòng),通過docker ps -a
命令查看,nginx會(huì)處于exit
或者一直restart
狀態(tài),因?yàn)閚ginx的運(yùn)行依賴于nginx.conf
這個(gè)配置文件中的相關(guān)配置。
解決思路及辦法
先運(yùn)行一個(gè)容器,不使用-v綁定,然后將容器中的相關(guān)文件直接copy到指定位置,之后就可以刪除容器,直接運(yùn)行之前的啟動(dòng)命令了。
具體操作如下:
首先創(chuàng)建好相關(guān)文件夾:
mkdir -p \ /mydata/nginx/html \ /mydata/nginx/conf \ /mydata/nginx/logs \ /mydata/nginx/cache
跑起來一個(gè)nginx容器:
docker run -d --name nginx nginx
復(fù)制配置文件和文件夾到宿主機(jī)指定目錄:
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
運(yùn)行啟動(dòng)命令,-v綁定相關(guān)卷:
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
移動(dòng)copy的conf.d
目錄中的文件到正確的位置:
mv /mydata/nginx/conf.d/* /mydata/nginx/conf/conf.d/ rm -rf /mydata/nginx/conf.d
這樣nginx容器就可以正常運(yùn)行,并且我們通過上面的操作將nginx.conf
文件和conf.d
目錄都映射到了宿主主機(jī)上,以后需要修改nginx.conf
文件或者為conf.d
添加.conf
文件都只需要在宿主機(jī)上的對(duì)應(yīng)位置操作即可。