将docker run转换为子组件

Ale*_*lls 9 docker docker-run gitleaks

我有这个docker run命令:

docker run --rm --name=gitleaks \
   -v "/keys/ssh/values:/root/.ssh"  \
   zricethezav/gitleaks  \
   --ssh-key='bucket' \
   --repo "$line"
Run Code Online (Sandbox Code Playgroud)

我将其翻译为:

  docker create zricethezav/gitleaks --name=gitleaks
  docker cp /keys/ssh/values gitleaks:/root/.ssh
  docker start gitleaks  --ssh-key='bucket' --repo "$line"
Run Code Online (Sandbox Code Playgroud)

但这给了我这个错误:

Error: No such container:path: gitleaks:/root
unknown flag: --ssh-key
Run Code Online (Sandbox Code Playgroud)

有人知道我哪里出问题了吗?最终,我打电话给docker从正在运行的容器中运行,并且在共享文件时遇到麻烦,因此尝试docker cp上班。

Pie*_* B. 7

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

docker create zricethezav/gitleaks --name=gitleaks 
Run Code Online (Sandbox Code Playgroud)

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

 docker start gitleaks --ssh-key='bucket' --repo "$line"
Run Code Online (Sandbox Code Playgroud)

我了解您想使用参数--ssh-key和--repo运行该映像,但是使用docker start命令是不可能的。如果要将这些参数传递给映像运行的进程,则应将这些参数粘贴到映像名称后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
Run Code Online (Sandbox Code Playgroud)

docker create的说明:

docker create用法是:

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
Run Code Online (Sandbox Code Playgroud)

OPTIONS应该在哪里指定标志IMAGE,之后的所有内容都IMAGE将解释为COMMANDARG...

跑步时

docker create zricethezav/gitleaks --name=gitleaks
Run Code Online (Sandbox Code Playgroud)

你实际上传递--name=gitleaksCOMMAND,这将覆盖默认图像命令(tipycally提供的一个CMD在Dockerfile),在那里你可能希望把它作为OPTIONS。例如,如果您运行:

docker create alpine --name=foobar
docker create --name=foobar alpine
Run Code Online (Sandbox Code Playgroud)

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

IMAGE        COMMAND              NAMES
alpine       "/bin/sh"            foobar
alpine       "--name=foobar"      quirky_varahamihira
Run Code Online (Sandbox Code Playgroud)

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


Daz*_*kin 2

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

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

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

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

ID=$(docker inspect gitleaks --format="{{.ID}}")
Run Code Online (Sandbox Code Playgroud)

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

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

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

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