Commit Graph

573 Commits

Author SHA1 Message Date
Matthew Heon
f87f0abb77 Pass along syslog variable to podman cleanup processes
As of now, there is no way to debug podman clean up processes.
They are started by conmon with no stdout/stderr and log nowhere.
This allows us to actually figure out what is going on when a
cleanup process runs.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-11 13:19:39 -04:00
Qi Wang
d73600626d Sort all command flags
Signed-off-by: Qi Wang <qiwan@redhat.com>
2018-10-11 13:17:14 -04:00
Matthew Heon
4882a6dd9d Add --ip flag and plumbing into libpod
Add the --ip flag back with bash completions. Manpages still
missing.

Add plumbing to pass appropriate the appropriate option down to
libpod to connect the flag to backend logic added in the previous
commits.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-11 11:24:08 -04:00
baude
255b56ae41 fix runlabel functions based on QA feedback
Signed-off-by: baude <bbaude@redhat.com>
2018-10-11 09:52:53 -05:00
baude
9be18c2eaf Stop containers in parallel fashion
Prior, we were stopping containers serially.  So if a container had a default
timeout of 10 seconds and there were five containers being stopped, the operation
would take roughly 50 seconds.  If we stop these containers in parallel, the operation
should be roughly 10 seconds and change which is a significant speed up at scale.

Signed-off-by: baude <bbaude@redhat.com>
2018-10-11 09:37:54 -05:00
OpenShift Merge Robot
71c2681310 Merge pull request #1587 from mheon/fix_pod_status
Fix pod status reporting for new Exited state
2018-10-08 11:09:28 -07:00
Valentin Rothberg
d4eca12cc1 runlabel: execute /proc/self/exe and avoid recursion
Execute /proc/self/exe instead of podman.  This makes the runlabel
command more portable as it works for binaries outside the path as
well as for local builds.

Also, avoid redundantly executing the runlabel command by setting
the PODMAN_RUNLABEL_NESTED environment variable to "1".  Podman
now checks for this variable before executing the runlabel command
and will throw an error in case the variable is set.

Signed-off-by: Valentin Rothberg <vrothberg@suse.com>
2018-10-05 17:28:18 +02:00
Adrian Reber
f7c8fd8a3d Add support to checkpoint/restore containers
runc uses CRIU to support checkpoint and restore of containers. This
brings an initial checkpoint/restore implementation to podman.

None of the additional runc flags are yet supported and container
migration optimization (pre-copy/post-copy) is also left for the future.

The current status is that it is possible to checkpoint and restore a
container. I am testing on RHEL-7.x and as the combination of RHEL-7 and
CRIU has seccomp troubles I have to create the container without
seccomp.

With the following steps I am able to checkpoint and restore a
container:

 # podman run --security-opt="seccomp=unconfined" -d registry.fedoraproject.org/f27/httpd
 # curl -I 10.22.0.78:8080
 HTTP/1.1 403 Forbidden # <-- this is actually a good answer
 # podman container checkpoint <container>
 # curl -I 10.22.0.78:8080
 curl: (7) Failed connect to 10.22.0.78:8080; No route to host
 # podman container restore <container>
 # curl -I 10.22.0.78:8080
 HTTP/1.1 403 Forbidden

I am using CRIU, runc and conmon from git. All required changes for
checkpoint/restore support in podman have been merged in the
corresponding projects.

To have the same IP address in the restored container as before
checkpointing, CNI is told which IP address to use.

If the saved network configuration cannot be found during restore, the
container is restored with a new IP address.

For CRIU to restore established TCP connections the IP address of the
network namespace used for restore needs to be the same. For TCP
connections in the listening state the IP address can change.

During restore only one network interface with one IP address is handled
correctly. Support to restore containers with more advanced network
configuration will be implemented later.

v2:
 * comment typo
 * print debug messages during cleanup of restore files
 * use createContainer() instead of createOCIContainer()
 * introduce helper CheckpointPath()
 * do not try to restore a container that is paused
 * use existing helper functions for cleanup
 * restructure code flow for better readability
 * do not try to restore if checkpoint/inventory.img is missing
 * git add checkpoint.go restore.go

v3:
 * move checkpoint/restore under 'podman container'

v4:
 * incorporated changes from latest reviews

Signed-off-by: Adrian Reber <areber@redhat.com>
2018-10-03 21:41:39 +02:00
Matthew Heon
82c754be2c Fix pod status reporting for new Exited state
Signed-off-by: Matthew Heon <mheon@redhat.com>
2018-10-03 15:34:34 -04:00
OpenShift Merge Robot
230edff521 Merge pull request #1580 from giuseppe/rootless-always-set-XDG_RUNTIME_DIR
rootless: always set XDG_RUNTIME_DIR
2018-10-03 07:03:16 -07:00
OpenShift Merge Robot
a3c4ce6717 Merge pull request #1531 from mheon/add_exited_state
Add ContainerStateExited and OCI delete() in cleanup()
2018-10-03 06:06:14 -07:00
Giuseppe Scrivano
2f73a9b0f6 rootless: always set XDG_RUNTIME_DIR
it is used internally by containers/image to locate the auth file.

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-03 10:41:47 +02:00
OpenShift Merge Robot
d5687946f6 Merge pull request #1528 from baude/runlabel
Add container runlabel command
2018-10-02 17:16:43 -07:00
OpenShift Merge Robot
506ae3650b Merge pull request #1576 from rhatdan/label
Disable SELinux labeling if --privileged
2018-10-02 09:07:50 -07:00
Matthew Heon
29dbab6440 Address review comments and fix ps output
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-02 12:05:22 -04:00
Matthew Heon
2c7f97d5a7 Add ContainerStateExited and OCI delete() in cleanup()
To work better with Kata containers, we need to delete() from the
OCI runtime as a part of cleanup, to ensure resources aren't
retained longer than they need to be.

To enable this, we need to add a new state to containers,
ContainerStateExited. Containers transition from
ContainerStateStopped to ContainerStateExited via cleanupRuntime
which is invoked as part of cleanup(). A container in the Exited
state is identical to Stopped, except it has been removed from
the OCI runtime and thus will be handled differently when
initializing the container.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>
2018-10-02 12:05:22 -04:00
OpenShift Merge Robot
89c5804fe0 Merge pull request #1563 from jwhonce/wip/pods
Implement pod varlink bindings
2018-10-02 08:47:53 -07:00
Daniel J Walsh
86d435f32f Disable SELinux labeling if --privileged
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-10-02 03:44:46 -04:00
Jhon Honce
ff38edaafe * Update documenation
Signed-off-by: Jhon Honce <jhonce@redhat.com>
2018-10-01 07:24:50 -07:00
Jhon Honce
9074565f4e Implement pod varlink bindings
* Update varlink document
* Add NoContainersInPod error in go and python
* Add support for varlink pod interface
* New code passes pylint
* Fix bug in test_runner.sh
* Update integration tests for race condition on status check
* Add missing port config file support

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2018-10-01 07:24:50 -07:00
Daniel J Walsh
249a51a2fc Add --all flag to podman kill
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-09-30 07:48:41 +02:00
baude
4f825f2e07 Add container runlabel command
Execute the command as described by a container image.  The value of the label is processed
into a command by:

1. Ensuring the first argument of the command is podman.
2. Substituting any variables with those defined by the environment or otherwise.

If no label exists in the container image, nothing is done.

podman container runlabel LABEL IMAGE extra_args
Signed-off-by: baude <bbaude@redhat.com>
2018-09-28 14:14:13 -05:00
baude
6db7027e97 Add buildah version and distribution to info
For the sake of debug and problem reporting, we would benefit from knowing
what buildah version was vendored into podman.  Also, knowing the distribution
and distribution version would also be handy.

Signed-off-by: baude <bbaude@redhat.com>
2018-09-28 10:48:16 -05:00
Daniel J Walsh
52c1365f32 Add --mount option for create & run command
Signed-off-by: Kunal Kushwaha <kushwaha_kunal_v7@lab.ntt.co.jp>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1524
Approved by: mheon
2018-09-21 21:33:41 +00:00
Matthew Heon
9e81f9daa4 Refactor Wait() to not require a timeout
We added a timeout for convenience, but most invocations don't
care about it. Refactor it into WaitWithTimeout() and add a
Wait() that doesn't require a timeout and uses the default.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>

Closes: #1527
Approved by: mheon
2018-09-21 20:07:51 +00:00
Daniel J Walsh
09f506930c Don't mount /dev/shm if the user told you --ipc=none
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1466
Approved by: mheon
2018-09-21 19:06:12 +00:00
Giuseppe Scrivano
c4b15ce46b rootless: fix create with images not in the storage
This chunk was mistakenly removed with ecec1a5430

Introduce it back as it solves the pull of an image that is not yet in
the storage when using create/run.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>

Closes: #1521
Approved by: baude
2018-09-21 13:04:36 +00:00
Giuseppe Scrivano
6d1eecf7cf create, rootless: join the userns of ns:PATH
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>

Closes: #1507
Approved by: rhatdan
2018-09-21 10:13:39 +00:00
Giuseppe Scrivano
1c73404fe1 create, rootless: join the userns of container:CONTAINER
so that we can also join the requested namespace.

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>

Closes: #1507
Approved by: rhatdan
2018-09-21 10:13:39 +00:00
Daniel J Walsh
fbfcc7842e Add new field to libpod to indicate whether or not to use labelling
Also update some missing fields libpod.conf obtions in man pages.

Fix sort order of security options and add a note about disabling
labeling.

When a process requests a new label.  libpod needs to reserve all
labels to make sure that their are no conflicts.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1406
Approved by: mheon
2018-09-20 16:01:29 +00:00
baude
af12e6534e report when rootless
when running as rootless, report as such.

resolves: #1509
Signed-off-by: baude <bbaude@redhat.com>

Closes: #1514
Approved by: rhatdan
2018-09-20 09:18:27 +00:00
Daniel J Walsh
92b28a88d8 Vendor in latest containers/buildah
Switch from projectatomic/buildah to containers/buildah

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-09-18 17:20:30 -04:00
Daniel J Walsh
c3a0874222 Don't crash if an image has no names
When image is not tagged, we should just set the imageName to the
image.ID.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1501
Approved by: mheon
2018-09-18 13:29:20 +00:00
Daniel J Walsh
800eb86338 Hooks supports two directories, process default and override
ALso cleanup files section or podman man page

Add description of policy.json
Sort alphabetically.
Add more info on  oci hooks

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1487
Approved by: umohnani8
2018-09-17 16:28:28 +00:00
Matthew Heon
b471904175 Merge pull request #1472 from giuseppe/rootless-fix-entrypoint
rootless: do not raise an error if the entrypoint is specified
2018-09-14 17:53:34 -04:00
Matthew Heon
8b21e2ecf5 Merge pull request #1461 from rhatdan/run
Remove duplicate code between create.go and run.go
2018-09-14 16:56:34 -04:00
Matthew Heon
0405555345 Merge pull request #1434 from rhatdan/wait
Add --interval flag to podman wait
2018-09-14 16:52:13 -04:00
Giuseppe Scrivano
1c26d81394 rootless: do not raise an error if the entrypoint is specified
do not error out when the storage is not initialized and the
entrypoint command is not available for the specified image.  Check it
when we re-exec in an user namespace and can access the storage.

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-09-14 13:22:55 +02:00
Matthew Heon
8e65b294c6 Do not set rlimits if we are rootless
Signed-off-by: Matthew Heon <matthew.heon@gmail.com>

Closes: #1437
Approved by: rhatdan
2018-09-13 17:56:58 +00:00
Matthew Heon
9126b45a3f Up default Podman rlimits to avoid max open files
Every port we open consumes an open FD. This can easily consume
all available FDs for the podman process. Set rlimits to resolve
this.

Signed-off-by: Matthew Heon <matthew.heon@gmail.com>

Closes: #1437
Approved by: rhatdan
2018-09-13 17:56:58 +00:00
Urvashi Mohnani
70b160ae03 Search registries with an empty query
Adds functionality to search registries implementing the v2
endpoint with an empty query, that is the results will be
all the available images on the registries.
If this is tried with a v1 registry an error will occur.
To search a whole registry, there needs to be a trailing slash
at the end, i.e `podman search registry.fedoraproject.org/`.

Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>

Closes: #1444
Approved by: rhatdan
2018-09-13 16:20:40 +00:00
Daniel J Walsh
ecec1a5430 Remove duplicate code between create.go and run.go
Create two new createInit for checking if the cotnainer is initialized
correctly.
createContainer which creates the actual container and containerConfig

Also added libpodruntime.GetContainerRuntime to put common runtime code
into separate function.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-09-13 12:16:14 -04:00
Daniel J Walsh
9ec82caa31 Add --interval flag to podman wait
Waiting uses a lot of CPU, so drop back to checking once/second
and allow user to pass in the interval.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2018-09-13 10:11:00 -04:00
Daniel J Walsh
61eda671ec Add podman rm --volumes flag
While this is not implemented yet, it is needed for working with existing
docker scripts.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1460
Approved by: mheon
2018-09-13 13:27:09 +00:00
Daniel J Walsh
d9580ec62b Pass on securityOpts from podInfraContainer to container added to pod.
This is an incomplete fix, as it would be best for the libpod library to be in charge of coordinating the container's dependencies on the infra container. A TODO was left as such. UTS is a special case, because the docker library that namespace handling is based off of doesn't recognize a UTS based on another container as valid, despite the library being able to handle it correctly. Thus, it is left in the old way.

Signed-off-by: haircommander <pehunt@redhat.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1347
Approved by: mheon
2018-09-11 13:31:55 +00:00
Steve Baker
2afadeec66 Fix displaying size on size calculation error
With this change if an error is raised when fetching the size of the
image, the error string will be printed as the size (instead of
panicing). In this particular case, the error string is "unable to
determine size".

This fixes bug #1405

Signed-off-by: Steve Baker <sbaker@redhat.com>

Closes: #1423
Approved by: mheon
2018-09-07 21:31:32 +00:00
Daniel J Walsh
87f90ce14a Fix pod sharing for utsmode
We should be sharing cgroups namespace by default in pods
uts namespace sharing was broken in pods.

Create a new libpod/pkg/namespaces for handling of namespace fields
in containers

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1418
Approved by: mheon
2018-09-07 18:18:54 +00:00
baude
d92650a922 use layer cache when building images
to more closely mimic docker default behavior, the --layers
cli option is set to true by default for podman.  the buildah
environment variable of BUILDAH_LAYERS is still honored and will
override the command line input.

this should be considered in place of PR #1383.

Many thanks for Scott McCarty for inspiring this welcome change.

Signed-off-by: baude <bbaude@redhat.com>

Closes: #1422
Approved by: rhatdan
2018-09-07 12:57:09 +00:00
Daniel J Walsh
dc025819f4 Fix nameing of Namespaces to be more consistent
Figuring out the difference between a User and a USERNS
as well as Cgroup and CGROUPNS

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1417
Approved by: TomSweeneyRedHat
2018-09-06 17:54:52 +00:00
Daniel J Walsh
2e6243b185 Fix up libpod.conf man pages and referencese to it.
Remove podman --config option, since it does not do anything.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

Closes: #1410
Approved by: mheon
2018-09-06 14:48:51 +00:00