啟動docker時候怎么向內部程序傳入參數


啟動docker的命令是docker run ******************

他有好多的參數,具體看 https://www.runoob.com/docker/docker-run-command.html,我們想要傳參的話使用的是 -e 

需要注意的一點是docker run 命令后面內容的先后順序,必須 一定 要把鏡像名字放到最后!!!

舉個例子 : docker run -it -d --name my_container -e PARAMS="我是參數"  my_image      # 橙色這些參數位置隨意, 藍色(即鏡像名字一定放最后)

我們這里實現傳參是通過環境變量實現的,這里的  -e PARAMS="我是參數" ,PARAMS是在Dockerfile中指定的

我舉個簡單的例子 ,  假設我要將tttt文件中的代碼創建docker,tttt文件中有ttt.py文件(啟動文件)  ,此時 Dockerfile需要與tttt文件夾在同一目錄下

# ttt.py 如下

from sys import argv
import os
if "__main__"==__name__:
    print(argv[1])
    print(type(argv[1]))
    print("Hello World!")

# Dockerfile 如下:

FROM docker.io/python:3.6MAINTAINER tianye
# 設置容器時間
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENV LANG C.UTF-8         # 設置編碼
ENV PATH=$PATH:/usr/local/lib/python3.6/    
ENV PYTHONPATH $PATH     # 配置環境變量

ENV PARAMS=""      # 給我們要傳的參數一個初始值

#代碼添加到code文件夾
ADD ./tttt/ /test/code/tttt/
#設置code文件夾為工作目錄
WORKDIR /test/code/tttt/
CMD python3 ttt.py $PARAMS

# 創建鏡像並啟動容器

docker build -t my_image .
docker run -it -d --name my_container -e PARAMS="hahaha"  my_image  # my_image 放最后  這里hahaha 加不加引號 無所謂
docker logs -f --tail 200 my_container

Dockerfile中 最后一行 $PARAMS 會解析為一個變量獲取其值,也就是 docker run傳入的參數 "hahaha", 在python程序中通過 argv[1] 就可以獲取到我們傳入的"hahaha"  ! 

 

!!!需要注意的一點是Dockerfile 中CMD的用法,如果我們不傳參那么寫法有很多

如: CMD ["python3", "ttt.py"]     CMD [python3, ttt.py]     CMD "python3" "ttt.py"     CMD python3 ttt.py 都沒問題

但是要傳參的話:  我們的參數   $PARAMS  是萬萬不能用 " " 的,不然Dockerfile會認為是普通字符串

CMD ["python", "ttt.py", $PARAMS]        (×)    原因可能是字符串和變量放到一個列表時,字符串優先級高,直接將 $PARAMS當作一個字符串處理

CMD [python3, ttt.py, $PARAMS]      (×)    

CMD "python3" "ttt.py" $PARAMS    (√,推薦!) 

CMD python3 ttt.py $PARAMS    (√)

 

 

 

 

 

 

 

 CMD [] 形式,中括號中 必須用逗號分割;  如果不用中括號,不能用逗號分割! OK 結束!

 參考:https://blog.csdn.net/qq_38983728/article/details/98741935

   https://www.runoob.com/docker/docker-run-command.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM