9

我有这个 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工作。

4

3 回答 3

7

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

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之后指定。

于 2019-05-16T13:15:35.493 回答
2

您需要使用 docker 容器 ID 而不是副本的名称。

创建容器时返回 ID,因此:

ID=$(docker create zricethezav/gitleaks --name=gitleaks)
docker cp /keys/ssh/values ${ID}:/root/.ssh

如果您已经创建了容器,您可以:

ID=$(docker inspect gitleaks --format="{{.ID}}")

但是,@mihai 是正确的,我不确定您如何才能开始配置容器。

我认为正确的方法是FROM:gitleaks构建您自己的图像(Dockerfile)来添加您的密钥。

该文档提供了使用 GitHub 令牌访问私有存储库的说明:

https://github.com/zricethezav/gitleaks#docker-usage-examples

于 2019-05-10T21:08:49.670 回答
1

tl;dr理想的翻译是

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

(十) 1.docker create zricethezav/gitleaks --name=gitleaks

您的翻译与 的使用docker create说明不符。

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

因此,您需要将选项--name=gitleaks与图像名称交换:

docker create --name=gitleaks zricethezav/gitleaks

(✓) 2。docker cp /keys/ssh/values gitleaks:/root/.ssh

这将成功执行。

(十) 3.docker start gitleaks --ssh-key='bucket' --repo "$line"

这会抛出一个错误说:

unknown flag: --ssh-key

根据的使用说明docker start既不能传递command也不能传递argument给已经存在的容器。

您有两种选择来克服这个问题:

  1. 附加--ssh-key='bucket' --repo "$line"docker create --name=gitleaks zricethezav/gitleaks

  2. 或者如果你很无聊,你可以试试这个

如您所见,我也未能将 --rm 标志从 docker run 转换为 3 个子命令,不知道该放在哪里

--rm选项可用于docker create,因此您应该将其放在那里。而且,正如Mihai提到的,你应该在运行时传递你的参数(--ssh-key等)docker create

docker create --rm --name=gitleaks zricethezav/gitleaks --ssh-key='bucket' --repo "$line"
于 2019-05-21T20:01:01.730 回答