Commit Graph

2770 Commits

Author SHA1 Message Date
Giuseppe Scrivano
6e4ce54d33 oci: use json formatted errors from the runtime
request json formatted error messages from the OCI runtime so that we
can nicely print them.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-06-13 10:27:06 +02:00
Matthew Heon
4e7e5f5cbd Make Inspect's mounts struct accurate to Docker
We were formerly dumping spec.Mount structs, with no care as to
whether it was user-generated or not - a relic of the very early
days when we didn't know whether a user made a mount or not.

Now that we do, match our output to Docker's dedicated mount
struct.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2019-06-12 17:14:21 -04:00
Matthew Heon
0084b04aca Provide OCI spec path in podman inspect output
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2019-06-12 15:53:41 -04:00
OpenShift Merge Robot
77d1cf0a32 Merge pull request #3305 from giuseppe/slirp-dns-first
rootless: use the slirp4netns builtin DNS first
2019-06-12 16:30:34 +02:00
Daniel J Walsh
3bbb692d80 If container is not in correct state podman exec should exit with 126
This way a tool can determine if the container exists or not, but is in the
wrong state.

Since 126 is documeted as:
**_126_** if the **_contained command_** cannot be invoked

It makes sense that the container would exit with this state.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2019-06-12 05:15:58 -04:00
Giuseppe Scrivano
0e34d9093e rootless: use the slirp4netns builtin DNS first
When using slirp4netns, be sure the built-in DNS server is the first
one to be used.

Closes: https://github.com/containers/libpod/issues/3277

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-06-12 10:29:57 +02:00
Daniel J Walsh
805d1d96fa Accidently removed /run/lock from systemd mounts
This is blowing up systemd containers on Ubuntu.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2019-06-11 07:54:55 -04:00
OpenShift Merge Robot
c93b8d6b02 Merge pull request #3240 from rhatdan/storageopts
When you change the storage driver we ignore the storage-options
2019-06-10 20:33:46 +02:00
OpenShift Merge Robot
39f5ea4c04 Merge pull request #3180 from mheon/inspect_volumes
Begin to break up pkg/inspect
2019-06-08 14:45:24 +02:00
Daniel J Walsh
629017bb19 When you change the storage driver we ignore the storage-options
The storage driver and the storage options in storage.conf should
match, but if you change the storage driver via the command line
then we need to nil out the default storage options from storage.conf.

If the user wants to change the storage driver and use storage options,
they need to specify them on the command line.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2019-06-08 06:20:31 -04:00
OpenShift Merge Robot
346128792c Merge pull request #2272 from adrianreber/migration
Add support to migrate containers
2019-06-07 14:33:20 +02:00
Divyansh Kamboj
ef1a025356 Add warning while untagging an image podman-load
Signed-off-by: Divyansh Kamboj <kambojdivyansh2000@gmail.com>
2019-06-04 17:54:07 +05:30
Adrian Reber
bef83c42ea 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>
2019-06-04 14:02:51 +02:00
Lawrence Chan
8fe22d48fb Inherit rootless init_path from system libpod.conf
Signed-off-by: Lawrence Chan <element103@gmail.com>
2019-06-03 18:44:36 -05:00
Adrian Reber
0028578b43 Added support to migrate containers
This commit adds an option to the checkpoint command to export a
checkpoint into a tar.gz file as well as importing a checkpoint tar.gz
file during restore. With all checkpoint artifacts in one file it is
possible to easily transfer a checkpoint and thus enabling container
migration in Podman. With the following steps it is possible to migrate
a running container from one system (source) to another (destination).

 Source system:
  * podman container checkpoint -l -e /tmp/checkpoint.tar.gz
  * scp /tmp/checkpoint.tar.gz destination:/tmp

 Destination system:
  * podman pull 'container-image-as-on-source-system'
  * podman container restore -i /tmp/checkpoint.tar.gz

The exported tar.gz file contains the checkpoint image as created by
CRIU and a few additional JSON files describing the state of the
checkpointed container.

Now the container is running on the destination system with the same
state just as during checkpointing. If the container is kept running
on the source system with the checkpoint flag '-R', the result will be
that the same container is running on two different hosts.

Signed-off-by: Adrian Reber <areber@redhat.com>
2019-06-03 22:05:12 +02:00
Adrian Reber
a05cfd24bb Added helper functions for container migration
This adds a couple of function in structure members needed in the next
commit to make container migration actually work. This just splits of
the function which are not modifying existing code.

Signed-off-by: Adrian Reber <areber@redhat.com>
2019-06-03 22:05:12 +02:00
Matthew Heon
1be345bd9d Begin to break up pkg/inspect
Let's put inspect structs where they're actually being used. We
originally made pkg/inspect to solve circular import issues.
There are no more circular import issues.

Image structs remain for now, I'm focusing on container inspect.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2019-06-03 15:54:53 -04:00
W. Trevor King
317a5c72c6 libpod/container_internal: Make all errors loading explicitly configured hook dirs fatal
Remove this IsNotExist out which was added along with the rest of this
block in f6a2b6bf2b (hooks: Add pre-create hooks for runtime-config
manipulation, 2018-11-19, #1830).  Besides the obvious "hook directory
does not exist", it was swallowing the less-obvious "hook command does
not exist".  And either way, folks are likely going to want non-zero
podman exits when we fail to load a hook directory they explicitly
pointed us towards.

Signed-off-by: W. Trevor King <wking@tremily.us>
2019-05-29 20:19:41 -07:00
OpenShift Merge Robot
294448c2ea Merge pull request #2709 from haircommander/journald
Add libpod journald logging
2019-05-29 17:51:27 +02:00
OpenShift Merge Robot
aed91ce3bf Merge pull request #3188 from giuseppe/fix-join-existing-containers
rootless: new function to join existing conmon processes
2019-05-29 17:12:40 +02:00
OpenShift Merge Robot
bc7afd6d71 Merge pull request #3208 from vrothberg/fix-3207
runtime: unlock the alive lock only once
2019-05-28 17:19:56 +02:00
Peter Hunt
88429242dd Add --follow to journald ctr logging
Signed-off-by: Peter Hunt <pehunt@redhat.com>
2019-05-28 11:14:08 -04:00
Peter Hunt
51bdf29f04 Address comments
Signed-off-by: Peter Hunt <pehunt@redhat.com>
2019-05-28 11:10:57 -04:00
Peter Hunt
02f971131a Implement podman logs with log-driver journald
Add a journald reader that translates the journald entry to a k8s-file formatted line, to be added as a log line

Note: --follow with journald hasn't been implemented. It's going to be a larger undertaking that can wait.

Signed-off-by: Peter Hunt <pehunt@redhat.com>
2019-05-28 11:10:57 -04:00
Peter Hunt
f61fa28d39 Added --log-driver and journald logging
Signed-off-by: Peter Hunt <pehunt@redhat.com>
2019-05-28 11:10:57 -04:00
OpenShift Merge Robot
335a1ef160 Merge pull request #3189 from vrothberg/apparmor-fixes
Apparmor fixes
2019-05-28 16:23:48 +02:00
Valentin Rothberg
6ddf47ca38 runtime: unlock the alive lock only once
Unlock the alive lock only once in the deferred func call.

Fixes: #3207
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2019-05-28 15:54:26 +02:00
Giuseppe Scrivano
c4dedd3021 Revert "rootless: change default path for conmon.pid"
since we now enter the user namespace prior to read the conmon.pid, we
can write the conmon.pid file again to the runtime dir.

This reverts commit 6c6a865436.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-05-25 13:47:59 +02:00
OpenShift Merge Robot
1dbb27365a Merge pull request #3190 from giuseppe/fix-userns-psgo
rootless: fix top huser and hgroup
2019-05-23 20:38:12 +02:00
Giuseppe Scrivano
e85b33fb04 rootless: fix top huser and hgroup
when running in rootless mode, be sure psgo is honoring the user
namespace settings for huser and hgroup.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-05-23 14:45:17 +02:00
Valentin Rothberg
fe928c6b42 apparmor: don't load/set profile in privileged mode
Commit 27f9e23a0b already prevents setting the profile when creating
the spec but we also need to avoid loading and setting the profile when
creating the container.

Fixes: #3112
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2019-05-23 13:17:30 +02:00
OpenShift Merge Robot
a4c42c6c6c Merge pull request #3178 from mheon/fix_gen_kube
Fix a 'generate kube' bug on ctrs with named volumes
2019-05-22 09:47:44 +02:00
Matthew Heon
968bcbc86b Remove unused return statement in kube volume code
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2019-05-21 23:08:39 -04:00
OpenShift Merge Robot
1cf9a1bdba Merge pull request #3173 from giuseppe/use-wait-for-file
libpod: prefer WaitForFile to polling
2019-05-21 22:08:17 +02:00
OpenShift Merge Robot
536fd6addd Merge pull request #3084 from giuseppe/rootless-pause-process
rootless: use a pause process to keep namespaces alive
2019-05-21 22:08:08 +02:00
Matthew Heon
cec56b0075 Merge pull request #3168 from rhatdan/vendor
Update vendor of buildah and containers/images
2019-05-21 15:54:26 -04:00
Matthew Heon
03824e04fd Fix a 'generate kube' bug on ctrs with named volumes
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2019-05-21 13:52:55 -04:00
Giuseppe Scrivano
3788da9344 libpod: prefer WaitForFile to polling
replace two usage of kwait.ExponentialBackoff in favor of WaitForFile
that uses inotify when possible.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-05-21 10:07:31 +02:00
Giuseppe Scrivano
f86bb561ef container: move channel close to its writer
let the writer of the channel close it.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-05-20 19:41:02 +02:00
Giuseppe Scrivano
57e781462c util: fix race condition in WaitForFile
enable polling also when using inotify.  It is generally useful to
have it as under high load inotify can lose notifications.  It also
solves a race condition where the file is created while the watcher
is configured and it'd wait until the timeout and fail.

Closes: https://github.com/containers/libpod/issues/2942

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-05-20 19:40:15 +02:00
Daniel J Walsh
1d505f6875 Update vendor of buildah and containers/images
Mainly add support for podman build using --overlay mounts.

Updates containers/image also adds better support for new registries.conf
file.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2019-05-20 13:39:40 -04:00
Divyansh Kamboj
ee3381f8f2 Minor fix splitting env vars in podman-commit
`string.Split()` splits into slice of size greater than 2
which may result in loss of environment variables

fixes #3132

Signed-off-by: Divyansh Kamboj <kambojdivyansh2000@gmail.com>
2019-05-19 06:51:30 +05:30
Giuseppe Scrivano
9dabb16e65 system: migrate stops the pause process
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-05-17 20:48:25 +02:00
Giuseppe Scrivano
791d53a214 rootless: use a pause process
use a pause process to keep the user and mount namespace alive.

The pause process is created immediately on reload, and all successive
Podman processes will refer to it for joining the user&mount
namespace.

This solves all the race conditions we had on joining the correct
namespaces using the conmon processes.

As a fallback if the join fails for any reason (e.g. the pause process
was killed), then we try to join the running containers as we were
doing before.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-05-17 20:48:24 +02:00
Giuseppe Scrivano
2e0fef51b3 migrate: not create a new namespace
this leaves the containers stopped but we won't risk to use the wrong
user namespace.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2019-05-17 20:47:55 +02:00
OpenShift Merge Robot
bd21a99501 Merge pull request #3121 from giuseppe/rootless-error-cni
network: raise a clearer error when using CNI
2019-05-16 16:24:06 +02:00
OpenShift Merge Robot
95d90c1de7 Merge pull request #3127 from mheon/fix_start_race
Ensure that start() in StartAndAttach() is locked
2019-05-16 01:08:05 +02:00
OpenShift Merge Robot
3057572fc1 Merge pull request #3124 from mheon/remove_pod_lock
When removing pods, free their locks
2019-05-15 21:17:54 +02:00
baude
7a58c6601b set default event logger based on build tags
once the default event logger was removed from libpod.conf, we need to
set the default based on whether the systemd build tag is used or not.

Signed-off-by: baude <bbaude@redhat.com>
2019-05-14 16:17:11 -05:00
Matthew Heon
d83d0abfbf Ensure that start() in StartAndAttach() is locked
StartAndAttach() runs start() in a goroutine, which can allow it
to fire after the caller returns - and thus, after the defer to
unlock the container lock has fired.

The start() call _must_ occur while the container is locked, or
else state inconsistencies may occur.

Fixes #3114

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2019-05-14 14:54:21 -04:00