【问题标题】:How do I pass arguments to docker run in a CLI (Command Line Interface)?如何在 CLI(命令行界面)中将参数传递给 docker run?
【发布时间】:2020-12-21 06:49:41
【问题描述】:

我需要我的图像以这个命令开始:

docker run -it --rm --security-opt seccomp=./chrome.json <image_id>

我正在将其部署到 Google Compute Engine:https://cloud.google.com/compute/docs/containers/deploying-containers

据我了解,我无法在此处指定参数,因此 Google Cloud 仅使用 docker run 命令启动它。

如何传递这些参数?也许我可以以某种方式在 Dockerfile 中指定这些参数?

【问题讨论】:

标签: docker google-cloud-platform google-compute-engine


【解决方案1】:

当您使用该功能直接在 Compute Engine 上部署容器时,您仅限于定义

  • 入口点
  • 在入口点传递的参数
  • 环境变量

就是这样,您不能添加其他/自定义参数。

一种解决方案是使用container-optimized OS (COS) on your Compute Engine and to create a startup script 来下载并运行带有您想要的 docker args 的容器,而不是使用内置功能

METADATA=http://metadata.google.internal/computeMetadata/v1
SVC_ACCT=$METADATA/instance/service-accounts/default
ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token | cut -d'"' -f 4)
docker login -u oauth2accesstoken -p $ACCESS_TOKEN https://gcr.io
docker run … gcr.io/your-project/your-image

在最后一行,您可以自定义启动脚本中的运行参数。

所以现在,为了更新,您必须更新启动脚本并重置您的虚拟机(或使用 COS 和新启动脚本创建新的计算引擎;并删除之前的)。

这是内置功能的便利性和定制能力之间的权衡问题。

【讨论】:

  • 好吧,这一切都说得通。我正在尝试采用启动脚本方式。我以前一直在使用startup-script 元数据,但不是使用容器。但现在它只是行不通。我可以手动运行它,它工作得非常好。但是在实例启动时,由于某种原因,它没有在日志中运行的痕迹。它存在于实例元数据中,以#!/bin/bash 开头,而且肯定没有拼写错误。
  • 在最新的 Docker 版本上,我需要将第 4 行更改为 echo $ACCESS_TOKEN | sudo docker login -u oauth2accesstoken --password-stdin https://gcr.io 才能正常工作。此外,make sure 您的 Compute Engine 服务帐号具有“存储对象查看者”角色。
猜你喜欢
  • 1970-01-01
  • 2017-04-13
  • 2021-08-03
  • 1970-01-01
  • 2018-12-29
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
相关资源
最近更新 更多