docker+ bind mount 部署復雜flask應用
阿新 • • 發佈:2019-01-18
關聯 鏡像 use mod RoCE nts gmail 原因 pip
報錯如下:
[root@test-wenqiang flask-skeleton]# docker run -d -p 80:5000 -v $(pwd):/skeleton --name flask zhaiwenqiang/flask-skeleton
9b705abd5e280723b8d271394769163224e3fcc052e7313637f42c5fec703e19
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: "scripts/dev.sh": permission denied".
原因:
- 沒有dev.sh的權限
解決方式:
需要在構建鏡像的時候給文件添加權限(當然也可以構建好鏡像然後修改鏡像中的文件的權限,但這樣做不優雅,作為用戶來說只負責使用,並不負責修改鏡像)
只貼出關鍵的兩個步驟
1. Dockerfile
# Dockerfile中的註釋跟python的單行註釋一致 FROM python:2.7 LABEL maintainer="Peng Xiao<[email protected]>" # 拷貝當前路徑下的所有文件到鏡像中的根路徑下的/skeleton中 COPY . /skeleton # 指定image的工作路徑,類似於cd到某文件夾中, 但是docker不建議使用cd WORKDIR /skeleton # 改變某個文件的執行權限,註意這裏還要從根路徑開始寫(也就是絕對路徑) RUN chmod 777 /skeleton/scripts/dev.sh RUN pip install -r requirements.txt EXPOSE 5000 # entrypoint 跟 cmd還是有區別的,要不然發明倆幹啥 # entrypoint 有兩種語法一種是sh命令 一種是下面的方式 ENTRYPOINT ["scripts/dev.sh"]
2. 運行容器命令
docker run -d -p 80:5000 -v $(pwd):/skeleton --name flask zhaiwenqiang/flask-pro
-v $(pwd):/skeleton 關聯當前文件夾與容器中的/skeleton文件夾
可以做到本地文件與容器中的文件關聯,當修改了本地的文件,容器中的文件會修改,反之亦然,容器中的服務會實時監控到這個變化
docker+ bind mount 部署復雜flask應用