【问题标题】:Docker run command to achieve few steps with a single line of commandDocker 运行命令,只需一行命令即可实现几步
【发布时间】:2019-06-25 10:59:37
【问题描述】:

我正在尝试运行 docker 命令以通过一行命令完成以下步骤。

A) 拉取 docker 映像,
B)然后启动容器,
C) 将目录从主机卷挂载到启动的容器,
D) 然后在容器内发出扫描命令以捕获报告。

我可以用这个命令实现步骤 a、b 和 c。

$ docker run -d -it --name test -v /root/tools:/var/local <mydocker-image-registry>

但是对于最后一步 D,即在容器内运行扫描并捕获报告,我无法将该命令添加到上述命令并使其正常工作。

下面的这条命令独立工作,但无法附加到上面的行并使其工作。

<scan> -s python -o ./reports

容器刚刚启动并在以下命令中退出

docker run -d -it --name test -v /root/tools:/var/local <mydocker-image-registry> <scan> -s python -o ./reports

还做了一些基本的搜索,并尝试添加如下入口点

docker run -d -it --name test -v /root/tools:/var/local <mydocker-image-registry> -- entrypoint <scan> -s python -o ./reports

但这也没有用。刚刚收到错误docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"--\": executable file not found in $PATH": unknown.

期望使用单个 docker 命令执行上述所有 4 个步骤,然后我得到填充结果的“报告”。

【问题讨论】:

  • 如果这对你有用,请检查我的答案,如果不是,请分享你的 dockerfile
  • 从日志error: Error: Output path must specify a valid, existing directory. 中非常清楚。我建议您创建容器,然后运行docker exec -it test ash| bash -c "scan-Command&gt; -s python -o ./reports info",然后调查错误。或分享你的 dockerfile
  • 您好 Adiii,感谢您回答我的问题。根据您的建议修改后运行以下命令。 ` $ docker run --rm -it --name test -v /root/tools:/var/local -s python -o ./reports info: 扫描开始.. . 信息:登录到:'/Scan1.log' 信息:当前 CLI 版本:2.x.x 警告:无法检查 CLI 更新。错误:错误:输出路径必须指定一个有效的现有目录。` 后来使用$ docker ps -a 检查,没有容器在运行。
  • 你明白了,它会那样做。对于 dockerfile,我实际上是直接从私有存储库中提取图像,因此我还没有源 Dockerfile。感谢您的帮助 Adiii。
  • 很高兴知道它有效。我很高兴@Vizag

标签: docker docker-run docker-entrypoint


【解决方案1】:

由于--entrypoints 无法与&lt;scan&gt; -s python -o ./reports 一起使用,导致您收到以下错误,因为路径中没有可执行文件。

docker: Error response from daemon: OCI runtime create failed: container_linux.go:345: starting container process caused "exec: \"--\": executable file not found in $PATH": unknown.

所以当您遇到上述错误时,这里是屏幕截图中的示例以及评论。

因此,将 4 选项指定为 docker run 命令的参数命令,而不是过度的入口点。

docker run --rm -dit --name test -v /root/tools:/var/local alpine ash -c "date"

这将打印日期并退出。

如果你想让它继续运行,那么你已经修改了一点。

docker run --rm -it --name test alpine ash -c "date; tail -f /dev/null"

这将使容器在不做任何事情的情况下继续运行。

另一个例子是 python,在一个命令中打印 hello world。

 docker run --rm -it --name test python:3.6-alpine ash -c "echo \"print('Hello, world ')\" >> ab.py; python ./ab.py"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 2016-06-17
    • 2021-03-13
    • 2020-12-07
    相关资源
    最近更新 更多