在运行docker import之后运行一个docker容器

4
我将尝试测试一项工作流程,其中我将导出一个Docker容器,然后将其导入到另一个系统上。为了进行测试,我只在我的系统上工作。我从已创建的容器中创建了一个.tar文件,然后删除了我的系统上的所有容器/卷。接着,我像这样将.tar文件重新导入到Docker中:
> docker import c:/max_docker/vol_backup.tar

sha256:39da6ef6400fed7b4bbf153bf9525c4f4094a8e5d465e1736a070769957a3d37

我验证了图片已经正确加载...

> docker images
REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE
<none>                            <none>              39da6ef6400f        30 seconds ago      11.8GB
ubuntu                            latest              74435f89ab78        39 hours ago        73.9MB
overv/openstreetmap-tile-server   latest              a964a65d28d1        2 weeks ago         3.21GB

然后,我尝试从我的图像创建一个容器:

> docker run -v /var/lib/postgresql/12/main --name dbstore2 39da6ef6400f
docker: Error response from daemon: No command specified.
See 'docker run --help'.

我的命令语法似乎不正确,但从Docker文档或SO上我并没有找到很好的解决方法。我只提供镜像ID就不能运行镜像吗?

编辑:

明确一下,我的整个目标是将大量数据从一个系统移动到另一个系统。我无法找到该卷(我在Windows 10上),也不知道如何导出该卷(Docker似乎不支持此功能),所以我想尝试将该卷的数据放入容器中,然后将该容器导出到另一个系统。


“-v”标志不需要用分号分隔的两个参数吗? - peinearydevelopment
这不是标准的Docker工作流程。通常你会在Dockerfile中描述你的镜像设置,使用docker build构建出一个镜像,并从其中运行容器;如果你需要更改镜像设置,更新Dockerfile并删除和重新创建现有的容器。我从来没有使用过docker import;你想用它做什么? - David Maze
请注意,以下与 Docker 相关的内容:没有任何 Docker 命令可以保留附加到容器中的卷中的数据:您无法提交或导出带有其数据的数据库容器。请将数据单独移动到新系统,然后运行指向它的新容器。 - David Maze
2个回答

2
你的镜像的CMD已经丢失,因此Docker不知道在容器中启动什么默认命令。这是导出镜像的已知限制,它不保留元数据。尝试使用docker save而不是export。或者使用--change标志在docker import上添加回你为原始镜像设置的CMD

0

docker exportdocker import仅适用于您的镜像文件系统:它们不知道您的CMDENTRYPOINT,因此导入的镜像将两者都未设置。

您可以使用docker image inspect检查它们是否设置了CmdEntrypoint的值:

$ docker image inspect
...
"Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": null,
            "Cmd": null,
            "Image": "",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": null
        },
...

如果您确实需要将容器保存为图像,并保留配置,则应使用docker commit将容器转换为图像,然后使用docker save将图像保存到文件中。但是,如果您只能使用图像,则应使用docker save而无需提交容器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接