docker - 将 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
工作。
解决方案
问题在于您的第一个和第二个命令语法。
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 create
或docker 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 [OPTIONS] IMAGE [COMMAND] [ARG...]
where OPTIONS
flags 应该在 before 中指定IMAGE
,并且之后的所有内容都IMAGE
将被解释为COMMAND
and ARG...
。
当你跑步时
docker create zricethezav/gitleaks --name=gitleaks
实际上,您传递--name=gitleaks
asCOMMAND
将覆盖默认图像命令(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
如果要同时传递OPTIONS
和COMMAND
,则必须OPTIONS
在图像名称之前和图像名称COMMAND
之后指定。
推荐阅读
- java - 在 Java 中运行 AWS CLI bash 命令时出现问题
- c++ - 迷宫问题中的老鼠,如何显示老鼠踏入随机生成矩阵的坐标?
- reactjs - 为什么 Material-UI 的 SwipeableDrawer 中的 props onClose 和 onOpen 标记为必填?
- python - 当我尝试使用类和继承时,我的一些属性设置为未定义
- php - 如何用钥匙产生价值?
- asp.net-mvc - 表未显示在实体框架图中 (edmx)
- php - laravel php引导嵌套选项卡不起作用
- python - Webdriver.chrome 没有打开 chrome
- angular - Angular 9 测试的“预期是间谍,但得到了功能”错误
- android - 考虑到 API 29 中的新安全更改,如何将应用程序返回到前台?