我的特定用例是,我想组织一些有关容器在其上运行的EC2实例的数据,并使我可用作环境变量。构建容器时,我想这样做。
我希望能够ENV VAR_NAME $(./script/that/gets/var)
在Dockerfile中执行类似的操作,但毫不奇怪,这行不通(您只得到了string
$(./script...
)。
我应该提及的是,我知道将docker run --env...
要执行此操作,但是我特别希望将其内置到容器中。
我是否缺少明显的东西?这有可能吗?
Docker v1.9或更高版本
如果您使用的是Docker
v1.9或更高版本,则可以通过支持构建时间参数来实现。参数声明中Dockerfile
通过使用ARG声明。
ARG REQUIRED_ARGUMENT
ARG OPTIONAL_ARGUMENT=default_value
当您稍后实际使用构建映像时docker build
,可以--build-arg
按照docker
docs中
所述通过标志传递参数。
$ docker build --build-arg REQUIRED_ARGUMENT=this-is-required .
请注意, 不 建议对密码或密钥(例如密钥或凭据)使用构建时变量。
此外,构建时变量可能会对缓存产生很大影响。因此,Dockerfile的构建应格外小心,以便能够尽可能多地利用缓存,从而加快构建过程。
编辑:从leedm777:s answer输入后,添加了“比v1.9更新的docker”部分。
v1.9之前的Docker
如果您使用的是1.9之前的Docker版本,则ARG
/ --build- arg
方法是不可能的。您在构建期间无法解析此类信息,因此必须将它们作为参数传递给docker run
命令。
Docker 映像 应随时间推移保持一致,而容器可以进行调整并视为“丢弃过程”。
解决此问题的旧方法是使用模板。这不是一个整洁的解决方案,但当时是极少数可行的选择之一。(此讨论的启示)。
这个码头商。yml: 使用这个。env文件(它位于根文件夹中,如docker-compose.yml和Dockerfile): 和节点服务器启动中的以下代码: 我真的更喜欢使用第一种或第二种方法 docker版本:18.06.1-CE docker-compose版本:1.19.0
因为我放在容器中的应用程序的bin名称可以更改(docker构建是更大构建的一部分,我很容易将正确的名称从一个构建传递到另一个构建)我想做这样的事情: < code >入口点["$PATH_TO_BIN"] 但由于没有外壳来评估,这通常会失败。理论上我可以去 但在这种情况下,我在执行时无法传递任何参数。 有没有可能在构建期间使用exec form并计算args或env变量(这样在运行时就不需要sh
我试图在构建过程中设置docker容器中的环境变量,但没有成功。使用运行命令时设置它们有效,但我需要在构建过程中设置它们。 Dockerfile文件 我用来构建的命令 运行 我正在检查可用的环境变量,通过使用 结果是 TEST_ENV不在场
在Docker主机上,我有: app.js DockerFile: 我还尝试在docker-compose.yml中使用,如下所示,这同样只使它在运行时可用,而不是在构建时可用: 请指教,我怎样才能使它以最不费解的方式工作?
问题内容: 我正在使用ajax google maps脚本,需要在for循环中创建动态变量名称。 我想的是:,,等。我想这有什么问题 Firebug给了我这个: 问题答案: 为此使用数组。
我是亚马逊网络服务的新手。我已经使用Elastic BeanStalk来承载我们的web应用程序。在web应用程序中,我使用了分配了某个位置的环境变量来将文件推入其中。 我已将VENDOR_HOME设置为,