diff options
author | Adrian Reber <areber@redhat.com> | 2019-03-14 07:57:16 +0000 |
---|---|---|
committer | Adrian Reber <areber@redhat.com> | 2019-06-04 14:02:51 +0200 |
commit | bef83c42eaacd83fb5020395f1bbdeb9a6f0f220 (patch) | |
tree | 6cb3dac84824f26b46df353c1956d35fec067c11 /libpod/container_internal_linux.go | |
parent | 0e072f9a9785c67f38859ab989267397b57154c8 (diff) | |
download | podman-bef83c42eaacd83fb5020395f1bbdeb9a6f0f220.tar.gz podman-bef83c42eaacd83fb5020395f1bbdeb9a6f0f220.tar.bz2 podman-bef83c42eaacd83fb5020395f1bbdeb9a6f0f220.zip |
migration: add possibility to restore a container with a new name
The option to restore a container from an external checkpoint archive
(podman container restore -i /tmp/checkpoint.tar.gz) restores a
container with the same name and same ID as id had before checkpointing.
This commit adds the option '--name,-n' to 'podman container restore'.
With this option the restored container gets the name specified after
'--name,-n' and a new ID. This way it is possible to restore one
container multiple times.
If a container is restored with a new name Podman will not try to
request the same IP address for the container as it had during
checkpointing. This implicitly assumes that if a container is restored
from a checkpoint archive with a different name, that it will be
restored multiple times and restoring a container multiple times with
the same IP address will fail as each IP address can only be used once.
Signed-off-by: Adrian Reber <areber@redhat.com>
Diffstat (limited to 'libpod/container_internal_linux.go')
-rw-r--r-- | libpod/container_internal_linux.go | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libpod/container_internal_linux.go b/libpod/container_internal_linux.go index d471d4191..4acc77afa 100644 --- a/libpod/container_internal_linux.go +++ b/libpod/container_internal_linux.go @@ -681,7 +681,13 @@ func (c *Container) restore(ctx context.Context, options ContainerCheckpointOpti // Read network configuration from checkpoint // Currently only one interface with one IP is supported. networkStatusFile, err := os.Open(filepath.Join(c.bundlePath(), "network.status")) - if err == nil { + // If the restored container should get a new name, the IP address of + // the container will not be restored. This assumes that if a new name is + // specified, the container is restored multiple times. + // TODO: This implicit restoring with or without IP depending on an + // unrelated restore parameter (--name) does not seem like the + // best solution. + if err == nil && options.Name == "" { // The file with the network.status does exist. Let's restore the // container with the same IP address as during checkpointing. defer networkStatusFile.Close() |