Dockerfile 踩坑記

Dockerfile 看起來很簡單嘛,但是自己實際操作的時候,還是有幾個地方需要注意的

Dockerfile內容:

#FROM ubuntu:18.04 #測試的烏班圖
FROM python:3.6-stretch # 直接使用python3.6
MAINTAINER longruanyun "[email protected]"
#RUN apt-get update 
#RUN apt-get install -y  python3-dev python3-pip 
RUN mkdir /demo
WORKDIR /demo
COPY $PWD/ . #拷貝當前目錄下的所有文件到鏡像的demo目錄
RUN python3 1.py #這裏是測試python3是否生效
#RUN pip3 install -r requirement.txt #注意使用-i的指令配置pip源
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple  -r requirement.txt
#ENTRYPOINT "python3 /demo/manage.py runserver 0.0.0.0:9000" # 這裏找不到manage.py,使用shell腳本
ENTRYPOINT ["/bin/bash","./run.sh"]
EXPOSE 9000
CMD "OK SUCCESS GOOD!" #無意義的一句話

1. 鏡像的名稱不能包含大寫字母

invalid argument "myWeb:1.0" for "-t, --tag" flag: invalid reference format: repository name must be lowercase
  1. 生成鏡像的時候,注意最後加個 . 注意這個 . (原點)
  2. Dockerfile 中,如果使用pip安裝依賴的時候,注意要臨時改變一下pip源

看這個錯誤:
pip
Dockerfile文件內容爲:
在這裏插入圖片描述
執行命令的過程,中間再pip這裏反覆出錯。網上查閱,說是容器內存不夠,我也是醉了… 看看官方的demo,豁然開朗:

這麼改一下就ok了:

RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple  -r requirement.txt

在這裏一定要指定一下源的地址,否則Dockerfile中的pip可能會出現如下錯誤

  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<urllib3.connection.VerifiedHTTPSConnection object at 0x7f20848eca20>, 'Connection to pypi.python.org timed out. (connect timeout=15)')': /simple/django/

  1. 使用容器掛載數據卷的時候,如果容器裏對應的文件夾內有文件,會清空所有內容。。。注意:清空容器的對應數據卷內容並替換爲主機卷裏的內容

  2. ENTERPOINT和CMD關係:
    進行docker run 裏執行的爲CMD,Dockerfile會被替換。但是ENTERPOINT的命令不會通過docker run 被覆蓋。docker run 可以覆蓋dockerfile裏的cmd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章