Commit graph

38871 commits

Author SHA1 Message Date
Sebastiaan van Stijn
cf169b45bb
daemon.setupPathsAndSandboxOptions() skip resolving symlinks
This came up in a review of a5324d6950, but
for some reason that comment didn't find its way to GitHub, and/or I
forgot to push the change.

These files are "copied" by reading their content with ioutil.Readfile(),
resolving the symlinks should therefore not be needed, and paths can be
passed as-is;

```go
func copyFile(src, dst string) error {
	sBytes, err := ioutil.ReadFile(src)
	if err != nil {
		return err
	}
	return ioutil.WriteFile(dst, sBytes, filePerm)
}
```

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-08-13 13:54:09 +02:00
Akihiro Suda
52d019221b
Merge pull request #41340 from thaJeztah/bump_docker_py
Update docker-py to 4.3.0
2020-08-13 19:46:26 +09:00
Sebastiaan van Stijn
3ee1ab87b7
Update docker-py to 4.3.0
full diff: https://github.com/docker/docker-py/compare/4.2.2...4.3.0

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-08-13 10:38:32 +02:00
Sebastiaan van Stijn
0168ddc77d
Merge pull request #41339 from thaJeztah/bump_tini
Update tini v0.19.0
2020-08-13 10:25:15 +02:00
Akihiro Suda
ab4d0c9264
Merge pull request #41341 from cpuguy83/fix_exit_event_race
Wait for container exit before forcing handler
2020-08-13 15:15:02 +09:00
Brian Goff
7fd23345c9 Wait for container exit before forcing handler
This code assumes that we missed an exit event since the container is
still marked as running in Docker but attempts to signal the process in
containerd returns a "process not found" error.

There is a case where the event wasn't missed, just that it hasn't been
processed yet.

This change tries to work around that possibility by waiting to see if
the container is eventually marked as stopped. It uses the container's
configured stop timeout for this.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2020-08-11 21:33:59 +00:00
Sebastiaan van Stijn
31d83961e9
Update tini v0.19.0
full diff: https://github.com/krallin/tini/compare/v0.18.0...v0.19.0

Release notes:

- mipsel build
- include checksums in releases
- ppc64le alias for the ppc64el build

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-08-11 11:26:28 +02:00
Sebastiaan van Stijn
c997a4995d
Merge pull request #41317 from tao12345666333/upgrade-runc-rc92
Update runc binary to v1.0.0-rc92
2020-08-07 19:53:56 +02:00
Akihiro Suda
1370072eb7
Merge pull request #41311 from wanghuaiqing2010/stretch
fix TestDaemonNoSpaceLeftOnDeviceError for mips64le
2020-08-06 15:20:25 +09:00
Jintao Zhang
2c7b48decd Update runc binary to v1.0.0-rc92
Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>
2020-08-06 13:37:18 +08:00
Sebastiaan van Stijn
aaf92f6276
Merge pull request #41310 from AkihiroSuda/containerd137
update containerd to v1.3.7
2020-08-05 20:53:52 +02:00
wanghuaiqing
0f0c1c04c8 fix TestDaemonNoSpaceLeftOnDeviceError for mips64le
Signed-off-by: wanghuaiqing <wanghuaiqing@loongson.cn>
2020-08-05 11:31:51 +08:00
Sebastiaan van Stijn
3f9876e631
Merge pull request #41292 from eelf/pass_network_error
Pass underlying network error in ErrorConnectionFailed
2020-08-04 17:43:14 +02:00
Sebastiaan van Stijn
79eef6e78c
Merge pull request #41178 from tao12345666333/update-runc-to-v1.0.0-rc91
vendor runc libraryv1.0.0-rc91-48-g67169a9d
2020-08-04 14:06:25 +02:00
Akihiro Suda
43d13054c5
update containerd to v1.3.7
Release note: https://github.com/containerd/containerd/releases/tag/v1.3.7

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2020-08-04 14:47:57 +09:00
Sebastiaan van Stijn
c560686600
Merge pull request #41295 from thaJeztah/disable_v1_push
Disable manifest v2 schema 1 push
2020-08-03 18:31:40 +02:00
Sebastiaan van Stijn
bf99523a45
Merge pull request #41306 from wanghuaiqing2010/fix_pr#41145
Supplement the omission of pr#41145
2020-08-03 15:51:48 +02:00
Evgeniy Makhrov
8ccb46a521 Check for context error that is wrapped in url.Error
Signed-off-by: Evgeniy Makhrov <e.makhrov@corp.badoo.com>
2020-08-03 15:59:22 +03:00
wanghuaiqing
ad30ef9113 Supplement the omission of pr#41145
Signed-off-by: wanghuaiqing <wanghuaiqing@loongson.cn>
2020-08-03 14:12:55 +08:00
Sebastiaan van Stijn
39691204f1
Merge pull request #41301 from wangyumu/fix-buildkit-pull-nil-panic
fix buildkit nil panic when frontend image exists
2020-07-31 21:24:09 +02:00
Sebastiaan van Stijn
6302dbbf46
Disable manifest v2 schema 1 push
For CI, a temporary `DOCKER_ALLOW_SCHEMA1_PUSH_DONOTUSE` environment
variable was added while we work out a solution for testing schema 1
pulls (which currently require pushing them to a local registry first
for testing).

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-07-31 20:13:58 +02:00
Sebastiaan van Stijn
e6c4597ec6
Merge pull request #41297 from IsaiahGrace/master
docker.service: Add multi-user.target to After= in unit file
2020-07-30 22:03:51 +02:00
Sebastiaan van Stijn
07746cc972
Merge pull request #41227 from cpuguy83/work_around_missing_shim_event
Work around missing shim event
2020-07-30 20:42:41 +02:00
Sebastiaan van Stijn
47b7c888ee
Merge pull request #41284 from akerouanton/service-ulimits
Support ulimits on Swarm services.
2020-07-30 20:08:41 +02:00
Jintao Zhang
9f28837c1d vendor protobuf v1.3.5
Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>
2020-07-30 17:22:59 +00:00
Jintao Zhang
c00d4907da vendor prometheus dependency.
github.com/prometheus/client_golang to v1.6.0
github.com/prometheus/client_model to v0.2.0
github.com/prometheus/common to v0.9.1
github.com/prometheus/procfs to v0.0.11

Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>
2020-07-30 17:02:57 +00:00
Jintao Zhang
e58a00211d vendor bbolt v1.3.5
Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>
2020-07-30 16:39:59 +00:00
Jintao Zhang
9ad35b7e69 vendor runc 67169a9d43456ff0d5ae12b967acb8e366e2f181
v1.0.0-rc91-48-g67169a9d

Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>
2020-07-30 16:16:11 +00:00
Jintao Zhang
9424eccfcd vendor containerd 779ef60231a555f7eb9ba82b052d59b69ca2ef10
v1.4.0-beta.1-150-g779ef602

Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>
2020-07-30 16:16:11 +00:00
Sebastiaan van Stijn
9e33baffc5
Merge pull request #41253 from AkihiroSuda/stats-v2-failcnt
statsV2: implement Failcnt
2020-07-30 15:42:40 +02:00
Akihiro Suda
51e3cd4761
statsV2: implement Failcnt
Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2020-07-30 14:31:20 +09:00
Akihiro Suda
0592aac95c
vendor: update containerd/cgroups
Changes: 44306b6a1d...318312a373

Signed-off-by: Akihiro Suda <akihiro.suda.cz@hco.ntt.co.jp>
2020-07-30 14:31:17 +09:00
Brian Goff
a072d726c7
Merge pull request #41281 from thaJeztah/bump_continuity
vendor: update containerd/continuity efbc4488d8fe1bdc16bde3b2d2990d9b3a899165
2020-07-29 16:48:01 -07:00
Tibor Vass
c87a330757
Merge pull request #41291 from thaJeztah/micro_nit
oci/deviceCgroup(): remove redundant variable
2020-07-29 23:59:19 +02:00
Isaiah Grace
0ca7456e52 Add multi-user.target to After=
Add multi-user.target to the After= list in docker.service so that multi-user.target does not wait for docker.service (and consequently wait for network-online.target).

Signed-off-by: Isaiah Grace <irgkenya4@gmail.com>
2020-07-29 14:33:55 -04:00
Brian Goff
6d9c4d60c5
Merge pull request #41288 from thaJeztah/fix_getexecuser
oci: correctly use user.GetExecUser interface
2020-07-29 10:23:36 -07:00
Sebastiaan van Stijn
bd0c2b3581
oci/deviceCgroup(): remove redundant variable
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-07-29 14:50:56 +02:00
Tibor Vass
663d143a9c
Merge pull request #41259 from thaJeztah/add_prune_events
API: add "prune" events
2020-07-29 14:32:31 +02:00
Tibor Vass
d2825ab5f9
Merge pull request #41283 from thaJeztah/bump_netns
vendor: vishvananda/netns db3c7e526aae966c4ccfa6c8189b693d6ac5d202
2020-07-29 14:31:03 +02:00
Aleksa Sarai
3108ae6226
oci: correctly use user.GetExecUser interface
A nil interface in Go is not the same as a nil pointer that satisfies
the interface. libcontainer/user has special handling for missing
/etc/{passwd,group} files but this is all based on nil interface checks,
which were broken by Docker's usage of the API.

When combined with some recent changes in runc that made read errors
actually be returned to the caller, this results in spurrious -EINVAL
errors when we should detect the situation as "there is no passwd file".

Signed-off-by: Aleksa Sarai <asarai@suse.de>
2020-07-29 14:04:47 +02:00
Albin Kerouanton
c76f380bea
Add ulimits support to services
Add Ulimits field to the ContainerSpec API type and wire it to Swarmkit.

This is related to #40639.

Signed-off-by: Albin Kerouanton <albin@akerouanton.name>
2020-07-29 02:09:06 +02:00
Wang Yumu
2b22a2e792 fix buildkit pull nil panic
Signed-off-by: Wang Yumu <37442693@qq.com>
2020-07-29 07:48:50 +08:00
Albin Kerouanton
1fdb1033c4
Bump swarmkit to d6592ddefd8a5319aadff74c558b816b1a0b2590
Includes docker/swarmkit#2967, which adds Ulimits to ContainerSpec.

Signed-off-by: Albin Kerouanton <albin@akerouanton.name>
2020-07-28 23:56:14 +02:00
Sebastiaan van Stijn
516d9719d5
Merge pull request #41282 from thaJeztah/bump_swarmkit2
vendor: docker/swarmkit 293aa2e66279a930999044cbf6d0e590baac16ff
2020-07-28 22:56:31 +02:00
Sebastiaan van Stijn
818bad6ef2
vendor: vishvananda/netns db3c7e526aae966c4ccfa6c8189b693d6ac5d202
full diff: 0a2b9b5464...db3c7e526a

- Use golang.org/x/sys/unix instead of syscall
- Set O_CLOEXEC when opening a network namespace
    - Fixes "the container‘s netns fds leak, causing the container netns to not
      clean up successfully after the container stops"
- Allows to create and delete named network namespaces

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-07-28 21:26:13 +02:00
Sebastiaan van Stijn
36b1920e56
vendor: docker/swarmkit 293aa2e66279a930999044cbf6d0e590baac16ff
full diff: 035d564a36...293aa2e662

- Fix bad comment on capability_drop field in protobuf def

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-07-28 21:16:18 +02:00
Brian Goff
c458bca6dc Handle missing c8d task on stop
In this case, we are sending a signal to the container (typically this
would be SIGKILL or SIGTERM, but could be any signal), but container
reports that the process does not exist.

At the point this code is happening, dockerd thinks that the container
is running, but containerd reports that it is not.

Since containerd reports that it is not running, try to collect the exit
status of the container from containerd, and mark the container as
stopped in dockerd.

Repro this problem like so:

```
id=$(docker run -d busybox top)
pkill containerd && pkill top
docker stop $id
```

Without this change, `docker stop $id` will first try to send SIGTERM,
wait for exit, then try SIGKILL.
Because the process doesn't exist to begin with, no signal is sent, and
so nothing happens.
Since we won't receive any event here to process, the container can
never be marked as stopped until the daemon is restarted.

With the change `docker stop` succeeds immediately (since the process is
already stopped) and we mark the container as stopped. We handle the
case as if we missed a exit event.

There are definitely some other places in the stack that could use some
improvement here, but this helps people get out of a sticky situation.

With io.containerd.runc.v2, no event is ever recieved by docker because
the shim quits trying to send the event.

With io.containerd.runtime.v1.linux the TastExit event is sent before
dockerd can reconnect to the event stream and we miss the event.

No matter what, we shouldn't be reliant on the shim doing the right
thing here, nor can we rely on a steady event stream.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2020-07-28 10:09:25 -07:00
Sebastiaan van Stijn
afdf5483c9
vendor: update containerd/continuity efbc4488d8fe1bdc16bde3b2d2990d9b3a899165
full diff: 26c1120b8d...efbc4488d8

Relevant changes:

- sysx/xattr: fix and improve
    - fix getxattrAll: change initial buffer size to 128 to prevent unneeded
      iterations and change the logic to get the real size in case we get ERANGE
      rather than doubling the buffer)
    - improve listxattrAll; refactor for readability, prevent calling `listxattr()`
      twice. Handle condition when attributes size is changed in between the two
      calls to listxattr().
- Remove Windows' Readlink fork
    - Drops support for Go 1.12 and under
- Fix sameFile() to recognize empty files as the same
    - fixes "Empty files can diff as "modified" even when they're not"

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-07-28 16:33:16 +02:00
Tibor Vass
0f41a77c69
Merge pull request #41207 from thaJeztah/remove_whitelist
Remove some outdated terminology where possible
2020-07-28 14:10:27 +02:00
Sebastiaan van Stijn
51c7992928
API: add "prune" events
This patch adds a new "prune" event type to indicate that pruning of a resource
type completed.

This event-type can be used on systems that want to perform actions after
resources have been cleaned up. For example, Docker Desktop performs an fstrim
after resources are deleted (https://github.com/linuxkit/linuxkit/tree/v0.7/pkg/trim-after-delete).

While the current (remove, destroy) events can provide information on _most_
resources, there is currently no event triggered after the BuildKit build-cache
is cleaned.

Prune events have a `reclaimed` attribute, indicating the amount of space that
was reclaimed (in bytes). The attribute can be used, for example, to use as a
threshold for performing fstrim actions. Reclaimed space for `network` events
will always be 0, but the field is added to be consistent with prune events for
other resources.

To test this patch:

Create some resources:

    for i in foo bar baz; do \
        docker network create network_$i \
        && docker volume create volume_$i \
        && docker run -d --name container_$i -v volume_$i:/volume busybox sh -c 'truncate -s 5M somefile; truncate -s 5M /volume/file' \
        && docker tag busybox:latest image_$i; \
    done;

    docker pull alpine
    docker pull nginx:alpine

    echo -e "FROM busybox\nRUN truncate -s 50M bigfile" | DOCKER_BUILDKIT=1 docker build -

Start listening for "prune" events in another shell:

    docker events --filter event=prune

Prune containers, networks, volumes, and build-cache:

    docker system prune -af --volumes

See the events that are returned:

    docker events --filter event=prune
    2020-07-25T12:12:09.268491000Z container prune  (reclaimed=15728640)
    2020-07-25T12:12:09.447890400Z network prune  (reclaimed=0)
    2020-07-25T12:12:09.452323000Z volume prune  (reclaimed=15728640)
    2020-07-25T12:12:09.517236200Z image prune  (reclaimed=21568540)
    2020-07-25T12:12:09.566662600Z builder prune  (reclaimed=52428841)

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2020-07-28 12:41:14 +02:00