zoukankan      html  css  js  c++  java
  • 启动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

  • 相关阅读:
    BZOJ2768: [JLOI2010]冠军调查
    BZOJ1532: [POI2005]Kos-Dicing
    BZOJ1106: [POI2007]立方体大作战tet
    BZOJ1132: [POI2008]Tro
    BZOJ3143: [Hnoi2013]游走
    BZOJ1108: [POI2007]天然气管道Gaz
    BZOJ1131: [POI2008]Sta
    BZOJ1391: [Ceoi2008]order
    BZOJ1116: [POI2008]CLO
    解析HTML、JS与PHP之间的数据传输
  • 原文地址:https://www.cnblogs.com/tianyee/p/14844956.html
Copyright © 2011-2022 走看看