当前位置: 首页 > 面试题库 >

使用Docker更新容器的环境变量

东郭淇
2023-03-14
问题内容

我已经设置了带有多个docker容器的服务器,可以使用jwilders
nginx reversre proxy
访问。运行容器时,可以设置VIRTUAL_HOST环境变量。在容器启动后,我一直试图找出一种更新这些方法的方法。

解决方案在这里发布:

您只需停止docker daemon并在以下位置更改容器配置

/var/lib/docker/containers/[container-id]/config.json

要求您停止docker守护程序,但我不想不必诉诸于此。

另一个在这里,使用docker
commit来保存实例信息:

话虽如此,通过将其提交为新映像,您可以保留容器中文件系统的更改;

$ docker run -it --name=foobar alpine sh
$ docker commit foobar mynewimage
$ docker rm foobar
$ docker run -it --name=foobar mynewimage sh

尽管对于更改环境变量来说,这似乎也有点过头。

我查看了docker
update,但这主要是为了重新配置容器资源。

当然,如果没有其他选择,我将使用上面的两种方法,但是我想知道是否有人找到了其他解决方案?


问题答案:

销毁您的容器,并使用来使用新的环境变量开始一个新的容器docker run -e ...。这与在正在运行的进程中更改环境变量相同,您可以先停止它,然后使用传入的新值重新启动。用销毁并重新创建新容器代替重新启动进程的概念。

如果您的容器中包含无法丢失的文件,则应该使用卷。容器文件系统的其他内容应该是一次性的或不可变的。



 类似资料:
  • 问题内容: 从 尚未在Dockerfile中声明的Docker 容器获取环境变量的最简单方法 是什么 ? 例如,通过某个会话设置的环境变量? 我可以做到,但是我更喜欢只返回值的东西。 我尝试使用,但是替换似乎发生在容器外部,因此我没有从容器中获取env var,而是从我自己的计算机中获取了env var。 谢谢。 问题答案: 在容器中运行以使变量替换发生在容器中的正确方法是:

  • 我有一个简单的docker容器,它在启动时运行一个导出一些变量的脚本。 所以Dockerfile中的最后一行是 而startup.sh有 运行容器时,终端中的输出显示“test ”,正如我所料。 然而,如果我随后运行< code > docker exec-it * container id * bash 并在容器内运行< code>echo $testvar,它将为空。 环境var没有持久化吗?

  • 问题内容: 我是Docker的新手,目前尚不清楚如何从容器访问外部数据库。硬编码连接字符串的最佳方法是吗? 问题答案: 您可以使用该标志将环境变量传递到您的容器。 启动脚本的示例: 或者,如果您不希望在命令行中使用,等显示该值,则可以直接从当前环境中获取该值,如果您不带: 如果您有许多环境变量,尤其是要保密的话,可以使用env文件: --env-file标志将文件名作为参数,并期望每行采用VAR

  • 我是Docker的新手,不清楚如何从容器访问外部数据库。是在连接字符串中硬编码的最佳方法吗?

  • 我主要用python编程,并且有一些虚拟环境方面的经验。我是新的软件,并开始寻找docker来运行我的代码。我想了解它的功能和工作原理。 据我所知,docker容器就像虚拟环境,在执行时运行一组指令,可以将其中包含的所有内容视为一个实体(因此它或其他内容不会相互制约?)。当我读到更多关于容器的内容时,它们听起来非常完美,可以消除对虚拟环境的任何需求,但仍然不确定。如果能澄清一下,我将不胜感激,因为

  • 问题内容: 我正在尝试设置一个postgres容器,并希望使用以下命令设置postgres登录名: 所以我像这样创建了docker-compose.yml 我还尝试了将环境变量声明为db部分的其他语法: 但是这些选项似乎都不起作用,因为无论出于什么原因,无论何时我尝试使用各种连接字符串连接到postgres数据库: 与抱怨没有用户数据库相反,它们都给我身份验证失败。 问题答案: 您收到的身份验证错