V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ladypxy
V2EX  ›  Docker

怎么传递参数到 docker 的程序?

  •  
  •   ladypxy · 2019-11-18 09:49:58 +08:00 · 6737 次点击
    这是一个创建于 1832 天前的主题,其中的信息可能已经有所发展或是发生改变。

    正在学习 docker,

    写了个小程序用来分析日志 可以接受参数来限制行数 ./log.py --limit=100 --log-file=apache.log

    log.py 打包到 docker 里后,

    docker run --mount source=/test,target=/app --log-file=apache.log --limit=100

    就会提示 unknown flag: --log- See 'docker run --help'.

    看网上写的是要编辑 DOCKFILE,按网上说的添加了

    ENTRYPOINT ["python3", "log.py"] CMD [""]

    似乎还是不行

    18 条回复    2019-11-18 19:25:39 +08:00
    x66
        1
    x66  
       2019-11-18 10:07:24 +08:00
    你可以把 pyton log.py --limit=100 --log-file=apache.log 写到一个 shell 文件里面,xxx.sh
    然后直接执行 xxx.sh 程序不需要参数.
    或者
    ENTRYPOINT ["python", "log.py"]
    CMD ["--limit=100 --log-file=apache.log"]
    amrnxcdt
        2
    amrnxcdt  
       2019-11-18 10:24:28 +08:00
    dockerfile 里面给 log.py 加个执行权限。然后工作目录定义到 log.py 的父目录
    docker run imagesname log.py --limit=100 --log-file=apache.log
    ladypxy
        3
    ladypxy  
    OP
       2019-11-18 10:30:25 +08:00
    @x66 这些参数是可变的,需要在运行时输入,如果按照你这样建议的写到 CMD 里,是不是就直接 fix 了
    x66
        4
    x66  
       2019-11-18 10:32:58 +08:00
    @ladypxy #3 你可以把变量通过 environment 在 docker run 的时候传进去,然后 shell 文件里面变量直接读取容器环境变量
    ladypxy
        5
    ladypxy  
    OP
       2019-11-18 10:50:18 +08:00
    @amrnxcdt 感谢回复。但是需求是参数是直接传送到 docker,而参数不包括 py 文件的名字
    ladypxy
        6
    ladypxy  
    OP
       2019-11-18 10:54:09 +08:00
    @x66 还有一个问题,py 文件在 docker 里,但是 py 要读取的日志在 host 上,这种情况下 dockerfile 怎么写?
    x66
        7
    x66  
       2019-11-18 10:57:13 +08:00
    @ladypxy #6 docker volume 把主机的目录挂进去
    XSG
        8
    XSG  
       2019-11-18 11:20:47 +08:00
    你的 run 命令里面镜像参数都没有,怎么执行?
    --log-file 被识别成 docker run 的参数了
    luckyrayyy
        9
    luckyrayyy  
       2019-11-18 11:22:37 +08:00
    1、写成配置文件
    2、写成环境变量
    yangyaofei
        10
    yangyaofei  
       2019-11-18 12:45:10 +08:00
    ARGV 也行貌似, 但是环境变量最好,在 docker-compose 里面用起来很爽
    ladypxy
        11
    ladypxy  
    OP
       2019-11-18 13:29:04 +08:00
    @luckyrayyy 这样写了貌似不行啊

    ENV log-file=apache.log limit=100
    ENTRYPOINT ["python3", ""log.py"]

    运行就提示 docker run --mount source=/test,target=/app --log-file=apache.log --limit=100
    unknown flag: --log-file
    taolu
        12
    taolu  
       2019-11-18 13:41:10 +08:00
    @ladypxy #11 docker run --mount source=/test,target=/app --env log-file=apache.log --env limit=100
    ladypxy
        13
    ladypxy  
    OP
       2019-11-18 13:45:51 +08:00
    @taolu 现在要求是不能加 --env
    liukangxu
        14
    liukangxu  
       2019-11-18 14:05:03 +08:00
    @ladypxy 为啥不能加 env ?这里的 env 是 container 内部生效的,不会对 host 产生影响
    taolu
        15
    taolu  
       2019-11-18 14:12:23 +08:00
    @ladypxy #13
    ENTRYPOINT ["python3", "log.py"] CMD [""]
    docker run --mount source=/test,target=/app ${image_name} --log-file=apache.log --limit=100
    ladypxy
        16
    ladypxy  
    OP
       2019-11-18 19:18:59 +08:00
    @taolu 我最初就这么写的,会提示 unknow flag: --log-file
    ladypxy
        17
    ladypxy  
    OP
       2019-11-18 19:21:59 +08:00
    @taolu 准确的说是,我打包成叫 test
    如果用
    docker run test --mount source=/test,target=/app ${image_name} --log-file=apache.log --limit=100, 会出现 log.py 里我设置的输入检测,提示 --log-file 没有输入

    而如果用
    docker run --mount source=/test,target=/app ${image_name} --log-file=apache.log --limit=100 test,就会提示 unknow flag
    taolu
        18
    taolu  
       2019-11-18 19:25:39 +08:00
    @ladypxy #17 ${image_name} 请替换成 test
    同时注意 docker run 的 Options 参数和容器 cmd 的区别
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 20:01 · PVG 04:01 · LAX 12:01 · JFK 15:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.