如何从泊坞窗图像中删除ENV设置

Vit*_*ner 8 docker

我有一个docker图像设置HOME和PATH:

[{
  ...
  "config": {
    "HOME=/",
  }
  ...
Run Code Online (Sandbox Code Playgroud)

我知道我可以替换它,但是可以删除它(并且可以使用正常的bash配置文件设置).我宁愿不破解shell配置文件来覆盖它.

Ale*_*oto 6

我无法得到@ creack为我工作的答案.

在我的情况下,我无意中将一些环境变量提交给图像,我想从图像中删除它们.

我最后通过使用-e没有变量值的选项来启动图像并"取消设置"环境变量,

例如,取消设置环境变量FOO

docker run -it -e FOO IMAGE /bin/bash

然后提交容器

docker commit -m 'removed FOO' CONTAINER_ID IMAGE

  • 注意:使用没有值的 -e 变量名 可以工作,但前提是该变量在运行 docker 命令的主机环境中不存在。文档声明它旨在传递变量:“如果操作符命名环境变量而不指定值,则命名变量的当前值将传播到容器的环境中”。因此,对于完全通用的答案,您可能应该在第一个 docker 命令之前添加“unset FOO”。 (2认同)

cre*_*ack 3

您只需执行手动提交即可。

此操作在 Dockerfile 中不可用,但可以手动完成。

执行此操作时docker inspect <image>,您可以检索用于创建此映像的容器的 ID。

然后你就可以这样做docker commit <container id> <new image name>,所有 ENV 和其他配置都将被刷新。

如果容器已被删除,您可以运行该映像docker run -d <image> <any command>,然后提交生成的容器。

如果你想保留一些配置,可以使用docker commit -run '{}' <container id> <new image name>语法。请参阅https://docs.docker.com/engine/reference/commandline/commit/了解更多信息。