首页 > 解决方案 > 将 docker run 翻译成子组件

问题描述

我有这个 docker run 命令:

docker run --rm --name=gitleaks \
   -v "/keys/ssh/values:/root/.ssh"  \
   zricethezav/gitleaks  \
   --ssh-key='bucket' \
   --repo "$line"

我把它翻译成这样:

  docker create zricethezav/gitleaks --name=gitleaks
  docker cp /keys/ssh/values gitleaks:/root/.ssh
  docker start gitleaks  --ssh-key='bucket' --repo "$line"

但它给了我这个错误:

Error: No such container:path: gitleaks:/root
unknown flag: --ssh-key

有人知道我哪里出错了吗?最终,我从一个正在运行的容器中调用 docker run 并且在共享文件时遇到了问题,因此尝试开始docker cp工作。

标签: dockerdocker-rungitleaks

解决方案


问题在于您的第一个和第二个命令语法。

docker create zricethezav/gitleaks --name=gitleaks 

--name应该在图像名称之前,否则docker create会将其解释为COMMAND参数而不是OPTIONS 标志

 docker start gitleaks --ssh-key='bucket' --repo "$line"

docker start我了解您想使用参数 --ssh-key 和 --repo 运行映像,但是使用命令是不可能的。如果你想让这些参数传递给镜像运行的进程,你应该将这些参数传递给镜像名称之后的docker createdocker run命令。

所以你应该这样做:

# Mind the --name before the image name
docker create --name=gitleaks zricethezav/gitleaks --ssh-key='bucket' --repo "$line"
docker cp /keys/ssh/values gitleaks:/root/.ssh
docker start gitleaks

docker create 的解释:

docker create用法是:

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]

where OPTIONSflags 应该在 before 中指定IMAGE,并且之后的所有内容都IMAGE将被解释为COMMANDand ARG...

当你跑步时

docker create zricethezav/gitleaks --name=gitleaks

实际上,您传递--name=gitleaksasCOMMAND将覆盖默认图像命令(Dockerfile 中通常提供的CMD命令),您可能希望将其传递为OPTIONS. 例如,如果您运行:

docker create alpine --name=foobar
docker create --name=foobar alpine

docker ps -a输出将如下所示:

IMAGE        COMMAND              NAMES
alpine       "/bin/sh"            foobar
alpine       "--name=foobar"      quirky_varahamihira

如果要同时传递OPTIONSCOMMAND,则必须OPTIONS在图像名称之前和图像名称COMMAND之后指定。


推荐阅读