The Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
Find a file
Albin Kerouanton 80c44b4b2e daemon: rename: don't reload endpoint from datastore
Commit 8b7af1d0f added some code to update the DNSNames of all
endpoints attached to a sandbox by loading a new instance of each
affected endpoints from the datastore through a call to
`Network.EndpointByID()`.

This method then calls `Network.getEndpointFromStore()`, that in
turn calls `store.GetObject()`, which then calls `cache.get()`,
which calls `o.CopyTo(kvObject)`. This effectively creates a fresh
new instance of an Endpoint. However, endpoints are already kept in
memory by Sandbox, meaning we now have two in-memory instances of
the same Endpoint.

As it turns out, libnetwork is built around the idea that no two objects
representing the same thing should leave in-memory, otherwise breaking
mutex locking and optimistic locking (as both instances will have a drifting
version tracking ID -- dbIndex in libnetwork parliance).

In this specific case, this bug materializes by container rename failing
when applied a second time for a given container. An integration test is
added to make sure this won't happen again.

Signed-off-by: Albin Kerouanton <albinker@gmail.com>
2024-01-23 22:53:21 +01:00
.devcontainer Add devcontainer configuration 2023-12-13 13:27:52 +01:00
.github ci: Always run snapshotter tests on Linux 2024-01-18 11:16:57 +01:00
api volumes: Implement subpath mount 2024-01-19 17:32:10 +01:00
builder pkg/system: return even richer xattr errors 2024-01-22 15:25:10 -05:00
cli frozen images: update to debian:bookworm-slim 2023-11-30 12:01:06 +01:00
client rename "image" vars to prevent conflicts with imports 2024-01-19 12:49:53 +01:00
cmd fix "host-gateway-ip" label not set for builder workers 2024-01-23 14:58:01 +01:00
container volumes/subpath: Plumb context 2024-01-19 17:32:21 +01:00
contrib dockerd-rootless-setuptool.sh: add nsenter subcommand 2024-01-17 22:59:18 +09:00
daemon daemon: rename: don't reload endpoint from datastore 2024-01-23 22:53:21 +01:00
distribution daemon/cluster: Cluster.imageWithDigestString: include mirrors to resolve digest 2024-01-04 16:53:45 +01:00
dockerversion dockerversion: DockerUserAgent(): allow custom versions to be passed 2023-06-01 18:21:58 +02:00
docs docs/api: remove version matrices from swagger files 2024-01-21 15:17:53 +01:00
errdefs feat: make errdefs.IsXXX helper functions work with wrapped errors 2024-01-05 22:54:13 +08:00
hack Merge pull request #47091 from thaJeztah/unskip_some_tests 2024-01-17 17:08:05 +01:00
image image/save: Fix layers order in OCI manifest 2024-01-22 13:48:12 +01:00
integration daemon: rename: don't reload endpoint from datastore 2024-01-23 22:53:21 +01:00
integration-cli integration-cli: simplify test-file creation 2024-01-22 21:43:30 +01:00
internal volumes/subpath: Plumb context 2024-01-19 17:32:21 +01:00
layer layer: ChecksumForGraphID: remove unused code for for migrating v1 layers 2024-01-08 12:28:41 +01:00
libcontainerd libcontainerd: create unstarted tasks 2024-01-10 13:50:26 -05:00
libnetwork daemon: rename: don't reload endpoint from datastore 2024-01-23 22:53:21 +01:00
oci Merge pull request from GHSA-jq35-85cj-fj4p 2023-10-25 23:57:51 +02:00
opts opts: ValidateIPAddress: improve error, godoc, and tests 2023-11-11 15:31:19 +01:00
pkg Merge pull request #45474 from thaJeztah/testing_cleanups 2024-01-23 10:01:27 +01:00
plugin libcontainerd: create unstarted tasks 2024-01-10 13:50:26 -05:00
profiles pkg/aaparser: remove, and integrate into profiles/apparmor 2024-01-02 15:15:49 +01:00
project project: document supported containerd versions 2023-11-06 13:43:18 -05:00
quota quota: increase sparse test-image to 300MB 2023-11-27 16:08:08 +01:00
reference migrate to new github.com/distribution/reference module 2023-09-05 12:09:26 +02:00
registry Merge pull request #46594 from regisb/36598-regisb/registry-mirror-path 2023-10-12 20:37:52 +02:00
reports Fix typos 2018-05-16 09:15:43 +08:00
restartmanager restartmanager: rename max/min as it collides with go1.21 builtin 2023-08-26 19:37:19 +02:00
runconfig rename "image" vars to prevent conflicts with imports 2024-01-19 12:49:53 +01:00
testutil Merge pull request #47009 from cpuguy83/swarm_rotate_key_flake 2024-01-19 23:13:34 +01:00
vendor vendor: golang.org/x/tools v0.14.0 2024-01-20 22:58:31 +01:00
volume volume/local: Make host resolution backwards compatible 2024-01-23 14:49:05 +01:00
.dockerignore ignorefiles: cleanup 2022-11-21 18:43:42 -07:00
.gitattributes chore: fix linguist for Dockerfile 2022-04-27 06:38:41 +02:00
.gitignore hack: introduce validate/no-module 2022-12-12 18:39:06 -07:00
.golangci.yml Remove httputil lint exceptions 2023-12-18 13:16:37 -08:00
.mailmap update authors and mailmap 2023-11-13 22:12:58 +01:00
AUTHORS update AUTHORS 2024-01-03 10:12:37 +01:00
codecov.yml codecov: disable "patch" status 2022-06-07 17:24:46 +02:00
CONTRIBUTING.md CONTRIBUTING.md: update links to golang docs and blog 2023-08-25 12:43:31 +02:00
docker-bake.hcl Dockerfile: remove APT_MIRROR build-arg 2023-12-04 13:52:58 +01:00
Dockerfile Dockerfile: update docker compose to v2.24.2 2024-01-23 09:51:41 +01:00
Dockerfile.simple update to go1.21.6 2024-01-10 09:46:37 +01:00
Dockerfile.windows update containerd binary to v1.7.12 2024-01-12 17:56:37 +01:00
Jenkinsfile remove s390x and ppc64ls pipelines 2023-08-14 16:54:44 +02:00
LICENSE Update LICENSE 2018-09-12 14:27:53 +01:00
MAINTAINERS Add Rob Murray (robmry) to curators 2024-01-09 13:20:44 +01:00
Makefile Dockerfile: remove APT_MIRROR build-arg 2023-12-04 13:52:58 +01:00
NOTICE switch kr/pty to creack/pty v1.1.7 2019-07-29 16:59:08 -07:00
README.md Fix grammar in README.md 2022-11-10 19:49:41 +00:00
ROADMAP.md Fix some typos in ROADMAP.md 2019-01-25 14:27:13 +08:00
SECURITY.md Update SECURITY.md to have an option to keep name anonymous if requested. 2019-06-18 16:37:16 +00:00
TESTING.md TESTING.md: note that integration-cli is deprecated 2020-12-18 07:51:46 +01:00
vendor.mod vendor: golang.org/x/tools v0.14.0 2024-01-20 22:58:31 +01:00
vendor.sum vendor: golang.org/x/tools v0.14.0 2024-01-20 22:58:31 +01:00
VENDORING.md fix the bare url and the Summary of http://semver.org 2017-01-17 16:20:11 +08:00

The Moby Project

Moby Project logo

Moby is an open-source project created by Docker to enable and accelerate software containerization.

It provides a "Lego set" of toolkit components, the framework for assembling them into custom container-based systems, and a place for all container enthusiasts and professionals to experiment and exchange ideas. Components include container build tools, a container registry, orchestration tools, a runtime and more, and these can be used as building blocks in conjunction with other tools and projects.

Principles

Moby is an open project guided by strong principles, aiming to be modular, flexible and without too strong an opinion on user experience. It is open to the community to help set its direction.

  • Modular: the project includes lots of components that have well-defined functions and APIs that work together.
  • Batteries included but swappable: Moby includes enough components to build fully featured container systems, but its modular architecture ensures that most of the components can be swapped by different implementations.
  • Usable security: Moby provides secure defaults without compromising usability.
  • Developer focused: The APIs are intended to be functional and useful to build powerful tools. They are not necessarily intended as end user tools but as components aimed at developers. Documentation and UX is aimed at developers not end users.

Audience

The Moby Project is intended for engineers, integrators and enthusiasts looking to modify, hack, fix, experiment, invent and build systems based on containers. It is not for people looking for a commercially supported system, but for people who want to work and learn with open source code.

Relationship with Docker

The components and tools in the Moby Project are initially the open source components that Docker and the community have built for the Docker Project. New projects can be added if they fit with the community goals. Docker is committed to using Moby as the upstream for the Docker Product. However, other projects are also encouraged to use Moby as an upstream, and to reuse the components in diverse ways, and all these uses will be treated in the same way. External maintainers and contributors are welcomed.

The Moby project is not intended as a location for support or feature requests for Docker products, but as a place for contributors to work on open source code, fix bugs, and make the code more useful. The releases are supported by the maintainers, community and users, on a best efforts basis only, and are not intended for customers who want enterprise or commercial support; Docker EE is the appropriate product for these use cases.


Legal

Brought to you courtesy of our legal counsel. For more context, please see the NOTICE document in this repo.

Use and transfer of Moby may be subject to certain restrictions by the United States and other governments.

It is your responsibility to ensure that your use and/or transfer does not violate applicable laws.

For more information, please see https://www.bis.doc.gov

Licensing

Moby is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.