1. 程式人生 > >docker+ bind mount 部署復雜flask應用

docker+ bind mount 部署復雜flask應用

關聯 鏡像 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應用