docker - 如何让环境变量持久化到导入的 Docker 镜像中

标签 docker

我使用以下内容创建了一个 Dockerfile:

FROM ubuntu

ENV test this

我在当前目录中构建图像:
docker build -t="test" .

我运行这个图像,只是为了确认我的环境变量已设置:
docker run -t -i <image id> /bin/bash

我输入 set在正在运行的容器中,并确认 test=this .

退出容器后,我使用以下两个命令导出图像:
cont=`docker run -d <image id> ls`
docker export $cont > test.tar

然后我通过以下方式导入图像:
cat test.tar | docker import - imported

运行新镜像:
docker run -t -i <image id returned from prev cmd> /bin/bash

我输入 set在这个正在运行的容器中,我的环境变量不再存在

我究竟做错了什么?

我已经使用带有其他命令的图像完成了此操作,除了环境变量之外的所有内容似乎都存在。

最佳答案

您可以保存图像而不是导出容器:

docker save your/image > /home/you/some-file.tar

如果您使用 save ,您需要使用 load恢复图像:
docker load < /home/you/some-file.tar

我写了一篇关于export区别的博文和 save几周前:http://tuhrig.de/difference-between-save-and-export-in-docker/

关于docker - 如何让环境变量持久化到导入的 Docker 镜像中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23893683/

相关文章:

docker - Phusion Passenger 和 Docker-Compose 权限问题

scala - 为我的sbt添加什么以支持非游戏项目的Docker镜像创建?

docker - 使用 Helm2 的 Kubernetes 滚动更新

postgresql - docker + Crontab : find container ID from service name for use in crontab

docker - 如何通过Dockerfile中的脚本动态设置环境变量?

docker - 如何列出群模式节点?

maven - 在Spring Boot应用程序中基于 './mvnw clean install'构建docker镜像时无法运行 “openjdk:8-jdk-alpine”

docker - 发送端口号之前,Spark Docker Java网关进程已退出

Docker 容器发布的端口无法访问?

java - 使用 Docker 是否会显着提高 IO 和处理速度?