热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Dockerfile:如何从文件内容设置环境变量

如何解决《Dockerfile:如何从文件内容设置环境变量》经验,为你挑选了2个好方法。

我想在Dockerfile中设置一个环境变量。

我有一个.env看起来像这样的文件: FOO=bar

在我的Dockerfile中,我有一个命令来解析该文件的内容并将其分配给FOO。

RUN 'export FOO=$(echo "$(cut -d'=' -f2 <<<$(grep FOO .env))")'

我遇到的问题是上面的脚本没有返回我需要的脚本。实际上,它不返回任何内容。

当我运行时docker-compose up --build,它将失败并显示此错误。

The command '/bin/sh -c 'export FOO=$(echo "$(cut -d'=' -f2 <<<$(grep FOO .env))")'' returned a non-zero code: 127

我知道该命令/bin/sh -c 'echo "$(cut -d'=' -f2 <<<$(grep FOO .env))"'将生成正确的输出,但是我无法弄清楚如何将该输出分配给环境变量。

关于我在做什么错的任何建议吗?



1> BMitch..:

First, the error you're seeing. I suspect there's a "not found" error message not included in the question. If that's the case, then the first issue is that you tried to run an executable that is the full string since you enclosed it in quotes. Rather than trying to run the shell command "export", it is trying to find a binary that is the full string with spaces in it and all. So to work past that error, you'd need to unquote your RUN string:

RUN export FOO=$(echo "$(cut -d'=' -f2 <<<$(grep FOO .env))")

However, that won't solve your underlying problem. The result of a RUN command is that docker saves the changes to the filesystem as a new layer to the image. Only changes to the filesystem are saved. The shell command you are running changes the shell state, but then that shell exits, the run command returns, and the state of that shell, including environment variables, is gone.

To solve this for your application, there are two options I can think of:

选项A:为所有.env值将build args注入您的build中,并编写一个脚本,该脚本使用--build-arg每个变量的正确标志调用build 。在Dockerfile中,每个变量都有两行:

ARG FOO1=default value1
ARG FOO2=default value2
ENV FOO1=${FOO1} \
    FOO2=${FOO2}

选项B:注入.env文件,并在容器中使用入口点对其进行处理。该入口点可以在启动实际应用程序之前运行导出命令。您还需要RUN在构建中需要这些变量的每个命令中执行此操作。我用于将文件内容拉入环境变量的一种速记方式是:

set -a && . .env && set +a



2> chamindaindi..:

环境变量

如果要在Docker映像中设置许多环境变量(以在容器内使用),则可以简单地env_file在docker-compose.yml文件中使用配置选项。使用该选项,.env文件中的所有条目都将被设置为映像中的环境变量,因此将被设置为容器中的环境变量。

有关env_file的更多信息


建立Args

如果您的要求是仅在您的内部使用某些变量,Dockerfile则可以按以下方式指定它们

ARG FOO
ARG FOO1
ARG FOO2
等等...

而且您必须build在您的键下指定这些参数docker-compose.yml

build: context: . args: FOO: BAR FOO1: BAR1 FOO2: BAR2

有关args的更多信息


访问docker-compose.yml文件中的.env值

如果您正在考虑将某些值从.env传递到docker-compose文件中,则只需将.env文件放置在与docker-compose.yml文件相同的位置,然后可以设置以下配置值;

ports: - "${HOST_PORT}:80"
因此,作为示例,您可以通过在.env文件中进行设置来设置服务的主机端口

请检查一下


推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了使用readlink命令获取文件的完整路径的简单方法,并提供了一个示例命令来打印文件的完整路径。共有28种解决方案可供选择。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • MyBatis错题分析解析及注意事项
    本文对MyBatis的错题进行了分析和解析,同时介绍了使用MyBatis时需要注意的一些事项,如resultMap的使用、SqlSession和SqlSessionFactory的获取方式、动态SQL中的else元素和when元素的使用、resource属性和url属性的配置方式、typeAliases的使用方法等。同时还指出了在属性名与查询字段名不一致时需要使用resultMap进行结果映射,而不能使用resultType。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文讨论了如何使用Web.Config进行自定义配置节的配置转换。作者提到,他将msbuild设置为详细模式,但转换却忽略了带有替换转换的自定义部分的存在。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
author-avatar
李2502933835
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有