草庐IT

docker ENV 与 RUN 导出

coder 2023-05-05 原文

假设我想组合这些命令

RUN command_1
ENV FOO bar
RUN command_2

进入

RUN command_1 && export FOO=bar && command_2

并且想知道使用 RUN exportENV 设置变量是否等效。

换句话说,Dockerfile 中的这些命令有区别吗?

ENV FOO bar

RUN export FOO=bar

最佳答案

issue 684 所示, export不会跨图像持续存在。 (不要忘记每个 Dockerfile 指令都会生成一个中间容器,提交到一个中间镜像中:该镜像不会保留导出的值)
ENV 将:

The environment variables set using ENV will persist when a container is run from the resulting image.
You can view the values using docker inspect, and change them using docker run --env <key>=<value>.

问题说明了这一点:

RUN export PATH=$PATH:/foo/bar # from directly in builder

When I do docker run [img] bash -c 'echo $PATH' it never includes /foo/bar.

试试看

创建一个新的 dockerfile,其中包含:

FROM centos:6
ENV FOO=foofoo
RUN export BAR=barbar
RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"

然后构建它。最后一步的输出是:

Step 4/4 : RUN export BAZ=bazbaz && echo "$FOO $BAR $BAZ"
 ---> Running in eb66196b238d
foofoo  bazbaz

你可以看到:

  • FOO多亏了ENV,通过中间容器持续存在关键词;
  • BAR由于 export 不会持续到下一步命令;
  • BAZ正确显示,因为变量在同一个容器上使用。

关于docker ENV 与 RUN 导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33379393/

有关docker ENV 与 RUN 导出的更多相关文章

  1. ruby 单元测试 : run some code after each failed test - 2

    在Test::Unit中的ruby​​单元测试断言失败后,在执行teardown之前,是否有一些简洁优雅的方法来立即执行我的代码?我正在做一些自动化的GUI测试,并希望在出现问题后立即截图。 最佳答案 如果您使用的是1.9,请不要使用Test::Unit::TestCase作为您的基类。对其进行子类化并覆盖#run_test以进行救援,截取屏幕截图并重新提出:classMyAbstractTestCase或者,我认为这实际上是最简洁的方法,您可以使用before_teardownHook:classMyTestCase这不适用于1.

  2. ruby - 如何使用远程 API 将 Confluence "Space"导出为 PDF - 2

    如何将Confluence的“空间”导出为pdf文件?看起来Confluence5.0可能仍然支持使用XML-RPCAPI。不过,我找不到调用什么的示例。https://developer.atlassian.com/display/CONFDEV/Remote+API+Specification+for+PDF+Export#RemoteAPISpecificationforPDFExport-XML-RPCInformation该链接表示调用应以pdfexport为前缀,但没有列出任何调用或给出示例。 最佳答案 这可以使用Bob

  3. ruby-on-rails - rspec rails 测试 : how can I force ActiveJob job's to run inline for certain tests? - 2

    我希望我的后台作业能够内联运行某些标记测试。我可以通过用perform_enqueueddo包装测试来做到这一点,但我希望能够用元数据标记它们,如果可能的话,它会自动发生。我试过以下方法:it"doeseverythinginthejobtoo",perform_enqueued:truedoendconfig.around(:each)do|example|ifexample.metadata[:perform_enqueued]perform_enqueued_jobsdoexample.runendendend但它会导致错误:undefinedmethod`perform_enq

  4. ruby-on-rails - connect() 到 unix :/var/run/unicorn. 连接到上游时 sock 失败(111:连接被拒绝) - 2

    我遵循ruby​​onrails一个应用程序点击部署。数据库做得很好,即使我检查Rails控制台一切正常017/02/2615:34:17[error]18564#0:*31connect()tounix:/var/run/unicorn.sockfailed(111:Connectionrefused)whileconnectingtoupstream,client:121.52.156.57,server:_,request:"GET/HTTP/1.1",upstream:"http://unix:/var/run/unicorn.sock:/",host:"188.166.157

  5. ruby - git:从 bitbucket 导出并导入 github(带提交) - 2

    我在bitbucket上创建了一个私有(private)git存储库并提交了代码。现在我想导出所有(提交、代码、历史记录)并将其导入github上的gitrepo。有没有办法做到这一点?谢谢 最佳答案 在本地检查所有内容到您的计算机和gitpull。创建一个github存储库将此存储库添加为您的第二个远程(“使用gitremote添加githubURL”)推送到第二个Remote 关于ruby-git:从bitbucket导出并导入github(带提交),我们在StackOverflow

  6. ruby-on-rails - Railscasts 第 362 集 - 导出到 Excel : How to avoid the warning message given by Excel 2010 when opening the file? - 2

    当使用RyanBates的Railscasts第362集关于导出到Excel(https://github.com/railscasts/362-exporting-csv-and-excel)的示例应用程序时,我注意到Excel2010(在Windows上)在打开.xls文件时给我一条警告消息我使用“下载为Excel”链接下载的文件。警告内容如下:“您尝试打开的文件...的格式与文件扩展名指定的格式不同。打开文件前请确认文件未损坏且来源可靠。是否要打开现在存档吗?”当我单击"is"时,我可以很好地打开文件。在使用Excel2011(在Mac上)时,我什至没有收到警告消息。但我希望能够

  7. ruby-on-rails - 如何在 ruby​​onrails 上将数据从模型导出到 excel 文件 - 2

    我正在尝试将数据从我的模型导出到Excel电子表格。我见过3种方式使用我不明白如何使用的电子表格gem,我看到的示例是写入本地文件,但我正在寻找每次用户点击链接时都会生成一个文件。创建一个名为export的方法,并在那里运行查询,然后在我看来创建一个export.xls文件,然后该文件创建我想将表格导出到excel文件,但是这种做法不允许我创建多张纸。学习了本教程,http://oldwiki.rubyonrails.org/rails/pages/HowToExportToExcel,但是这里没有显示如何将链接放在View中,在我看来我在路由中遗漏了一些东西,我可以提供github以

  8. ruby - 是否可以从 ruby​​ 脚本导出环境属性? - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:ExportinganEnvironmentVariableinRuby我需要在ruby​​脚本中设置几个环境属性。通常,在bash中,我会执行以下操作:$exportSOME_VAR=some_value但在ruby​​中,以下(显然)不起作用:irb(main):002:0>`exportSOME_VAR=some_value`(irb):2:commandnotfound:exportASDF=1=>""有办法吗?

  9. ruby-on-rails - 迪尔德 : Symbol not found: _rb_ary_new_from_values When trying to run foreman start - 2

    尝试运行“foremanstart”来执行我的rails文件时,我收到以下错误。dyld:Symbolnotfound:_rb_ary_new_from_valuesReferencedfrom:/Users/paulbattisson/.rvm/gems/ruby-2.1.1/gems/psych-2.0.5/lib/psych.bundleExpectedin:flatnamespace如果我运行railss那么应用程序可以正常启动,但是我想使用以下Procfile:web:bundleexecrackupconfig.ru-p$PORTresque:envTERM_CHILD=1

  10. ruby - I18n::InvalidLocaleData:I18n gem 在 js 导出中有问题 - 2

    我正在OSX10.13.4上使用Rails3.2.22.4、Ruby2.2.7开发一个应用程序。有多个翻译文件,例如。en.yml,sq.yml基于国家。从下面的ruby​​mine执行命令时,加载网页时出现错误。rake--tracei18n:js:export来自en.yml的yaml内容已经过验证并且是正确的。从文件中删除后引发错误的特定行将在其他一些.yml文件中给出错误。正在使用当前版本的gemi18n(0.9.5)。Rails服务器启动但加载Web应用程序第一页时因同样的错误而中断。代码遇到i18n翻译代码时抛出错误,当错误从一个文件转移到另一个文件时,yml格式不是问题。

随机推荐