Code Monkey home page Code Monkey logo

docker-library / official-images Goto Github PK

View Code? Open in Web Editor NEW
6.3K 264.0 2.3K 25.27 MB

Primary source of truth for the Docker "Official Images" program

Home Page: https://hub.docker.com/u/library

License: Apache License 2.0

Shell 90.48% Python 1.52% Haskell 0.02% Hy 0.59% Ruby 2.44% PHP 0.68% Java 1.23% Perl 0.02% Julia 0.22% JavaScript 0.02% C 0.04% Go 0.04% C++ 0.05% Erlang 0.05% Elixir 0.03% Swift 0.01% Haxe 0.18% Rust 0.03% Prolog 1.78% Dockerfile 0.56%

official-images's Introduction

Docker Official Images

Table of Contents

  1. Docker Official Images
    1. Table of Contents
    2. What are "Official Images"?
    3. Architectures other than amd64?
    4. More FAQs?
    5. Contributing to the standard library
      1. Review Guidelines
        1. Maintainership
        2. Repeatability
        3. Consistency
        4. Clarity
        5. init
        6. Cacheability
        7. Security
          1. Image Build
          2. Runtime Configuration
          3. Security Releases
        8. Multiple Architectures
      2. Commitment
    6. Library definition files
      1. Filenames
      2. Tags and aliases
      3. Instruction format
      4. Creating a new repository
      5. Adding a new tag in an existing repository (that you're the maintainer of)
      6. Change to a tag in an existing repository (that you're the maintainer of)
    7. Bashbrew

What are "Official Images"?

The Docker Official Images are curated images hosted on Docker Hub. The main tenets are:

See Docker's documentation for a good high-level overview of the program.

In essence we strive to heed upstream's recommendations on how they intend for their software to be consumed. Many images are maintained in collaboration with the relevant upstream project if not maintained directly by them. Additionally we aim to exemplify the best practices for Dockerfiles to serve as a reference when making or deriving your own images from them.

(If you are a representative of an upstream for which there exists an image and you would like to get involved, please see the Maintainership section below!)

Architectures other than amd64?

Some images have been ported for other architectures, and many of these are officially supported (to various degrees).

As of 2017-09-12, these other architectures are included under the non-prefixed images via "manifest lists" (also known as "indexes" in the OCI image specification), such that, for example, docker run hello-world should run as-is on all supported platforms.

If you're curious about how these are built, head over to https://doi-janky.infosiftr.net/job/multiarch/ to see the build scaffolding.

See the multi-arch section below for recommendations in adding more architectures to an official image.

More FAQs?

Yes! We have a dedicated FAQ repository where we try to collect other common questions (both about the program and about our practices).

Contributing to the standard library

Thank you for your interest in the Docker official images project! We strive to make these instructions as simple and straightforward as possible, but if you find yourself lost, don't hesitate to seek us out on Libera.Chat IRC in channel #docker-library or by creating a GitHub issue here.

Be sure to familiarize yourself with Official Repositories on Docker Hub and the Best practices for writing Dockerfiles in the Docker documentation. These will be the foundation of the review process performed by the official images maintainers. If you'd like the review process to go more smoothly, please ensure that your Dockerfiles adhere to all the points mentioned there, as well as below, before submitting a pull request.

Also, the Hub descriptions for these images are currently stored separately in the docker-library/docs repository, whose README.md file explains more about how it's structured and how to contribute to it. Please be prepared to submit a PR there as well, pending acceptance of your image here.

Review Guidelines

Because the official images are intended to be learning tools for those new to Docker as well as the base images for advanced users to build their production releases, we review each proposed Dockerfile to ensure that it meets a minimum standard for quality and maintainability. While some of that standard is hard to define (due to subjectivity), as much as possible is defined here, while also adhering to the "Best Practices" where appropriate.

A checklist which may be used by the maintainers during review can be found in NEW-IMAGE-CHECKLIST.md.

Maintainership

Version bumps and security fixes should be attended to in a timely manner.

If you do not represent upstream and upstream becomes interested in maintaining the image, steps should be taken to ensure a smooth transition of image maintainership over to upstream.

For upstreams interested in taking over maintainership of an existing repository, the first step is to get involved in the existing repository. Making comments on issues, proposing changes, and making yourself known within the "image community" (even if that "community" is just the current maintainer) are all important places to start to ensure that the transition is unsurprising to existing contributors and users.

When taking over an existing repository, please ensure that the entire Git history of the original repository is kept in the new upstream-maintained repository to make sure the review process isn't stalled during the transition. This is most easily accomplished by forking the new from the existing repository, but can also be accomplished by fetching the commits directly from the original and pushing them into the new repo (ie, git fetch https://github.com/jsmith/example.git master, git rebase FETCH_HEAD, git push -f). On GitHub, an alternative is to move ownership of the git repository. This can be accomplished without giving either group admin access to the other owner's repository:

  • create temporary intermediary organization
  • give old and new owners admin access to intermediary organization
  • old owner transfers repo ownership to intermediary organization
  • new owner transfers repo ownership to its new home
    • recommend that old owner does not fork new repo back into the old organization to ensure that GitHub redirects will just work

Repeatability

Rebuilding the same Dockerfile should result in the same version of the image being packaged, even if the second build happens several versions later, or the build should fail outright, such that an inadvertent rebuild of a Dockerfile tagged as 0.1.0 doesn't end up containing 0.2.3. For example, if using apt to install the main program for the image, be sure to pin it to a specific version (ex: ... apt-get install -y my-package=0.1.0 ...). For dependent packages installed by apt there is not usually a need to pin them to a version.

No official images can be derived from, or depend on, non-official images (allowing the non-image scratch and the intentionally limited exceptions pinned in .external-pins -- see also .external-pins/list.sh).

Consistency

All official images should provide a consistent interface. A beginning user should be able to docker run official-image bash (or sh) without needing to learn about --entrypoint. It is also nice for advanced users to take advantage of entrypoint, so that they can docker run official-image --arg1 --arg2 without having to specify the binary to execute.

  1. If the startup process does not need arguments, just use CMD:

    CMD ["irb"]
  2. If there is initialization that needs to be done on start, like creating the initial database, use an ENTRYPOINT along with CMD:

    ENTRYPOINT ["/docker-entrypoint.sh"]
    CMD ["postgres"]
    1. Ensure that docker run official-image bash (or sh) works too. The easiest way is to check for the expected command and if it is something else, just exec "$@" (run whatever was passed, properly keeping the arguments escaped).

      #!/bin/sh
      set -e
      
      # this if will check if the first argument is a flag
      # but only works if all arguments require a hyphenated flag
      # -v; -SL; -f arg; etc will work, but not arg1 arg2
      if [ "$#" -eq 0 ] || [ "${1#-}" != "$1" ]; then
          set -- mongod "$@"
      fi
      
      # check for the expected command
      if [ "$1" = 'mongod' ]; then
          # init db stuff....
          # use gosu (or su-exec) to drop to a non-root user
          exec gosu mongod "$@"
      fi
      
      # else default to run whatever the user wanted like "bash" or "sh"
      exec "$@"
  3. If the image only contains the main executable and its linked libraries (ie no shell) then it is fine to use the executable as the ENTRYPOINT, since that is the only thing that can run:

    ENTRYPOINT ["fully-static-binary"]
    CMD ["--help"]

    The most common indicator of whether this is appropriate is that the image Dockerfile starts with scratch (FROM scratch).

Clarity

Try to make the Dockerfile easy to understand/read. It may be tempting, for the sake of brevity, to put complicated initialization details into a standalone script and merely add a RUN command in the Dockerfile. However, this causes the resulting Dockerfile to be overly opaque, and such Dockerfiles are unlikely to pass review. Instead, it is recommended to put all the commands for initialization into the Dockerfile as appropriate RUN or ENV command combinations. To find good examples, look at the current official images.

Some examples at the time of writing:

init

Following the Docker guidelines it is highly recommended that the resulting image be just one concern per container; predominantly this means just one process per container, so there is no need for a full init system. There are two situations where an init-like process would be helpful for the container. The first being signal handling. If the process launched does not handle SIGTERM by exiting, it will not be killed since it is PID 1 in the container (see "NOTE" at the end of the Foreground section in the docker docs). The second situation would be zombie reaping. If the process spawns child processes and does not properly reap them it will lead to a full process table, which can prevent the whole system from spawning any new processes. For both of these concerns we recommend tini. It is incredibly small, has minimal external dependencies, fills each of these roles, and does only the necessary parts of reaping and signal forwarding.

Be sure to use tini in CMD or ENTRYPOINT as appropriate.

It is best to install tini from a distribution-provided package (ex. apt-get install tini). If tini is not available in your distribution or is too old, here is a snippet of a Dockerfile to add in tini:

# Install tini for signal processing and zombie killing
ENV TINI_VERSION v0.18.0
ENV TINI_SIGN_KEY 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7
RUN set -eux; \
  wget -O /usr/local/bin/tini "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini"; \
  wget -O /usr/local/bin/tini.asc "https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini.asc"; \
  export GNUPGHOME="$(mktemp -d)"; \
  gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$TINI_SIGN_KEY"; \
  gpg --batch --verify /usr/local/bin/tini.asc /usr/local/bin/tini; \
  command -v gpgconf && gpgconf --kill all || :; \
  rm -r "$GNUPGHOME" /usr/local/bin/tini.asc; \
  chmod +x /usr/local/bin/tini; \
  tini --version

Cacheability

This is one place that experience ends up trumping documentation for the path to enlightenment, but the following tips might help:

  • Avoid COPY/ADD whenever possible, but when necessary, be as specific as possible (ie, COPY one-file.sh /somewhere/ instead of COPY . /somewhere).

    The reason for this is that the cache for COPY instructions considers file mtime changes to be a cache bust, which can make the cache behavior of COPY unpredictable sometimes, especially when .git is part of what needs to be COPYed (for example).

  • Ensure that lines which are less likely to change come before lines that are more likely to change (with the caveat that each line should generate an image that still runs successfully without assumptions of later lines).

    For example, the line that contains the software version number (ENV MYSOFTWARE_VERSION 4.2) should come after a line that sets up the APT repository .list file (RUN echo 'deb http://example.com/mysoftware/debian some-suite main' > /etc/apt/sources.list.d/mysoftware.list).

Security

Image Build

The Dockerfile should be written to help mitigate interception attacks during build. Our requirements focus on three main objectives: verifying the source, verifying author, and verifying the content; these are respectively accomplished by the following: using https where possible; importing PGP keys with the full fingerprint in the Dockerfile to check signatures; embedding checksums directly in the Dockerfile. All three should be used when possible. Just https and embedded checksum can be used when no signature is published. As a last resort, just an embedded checksum is acceptable if the site doesn't have https available and no signature.

The purpose in recommending the use of https for downloading needed artifacts is that it ensures that the download is from a trusted source which also happens to make interception much more difficult.

The purpose in recommending PGP signature verification is to ensure that only an authorized user published the given artifact. When importing PGP keys, please use the the keys.openpgp.org service when possible (preferring keyserver.ubuntu.com otherwise). See also the FAQ section on keys and verification.

The purpose in recommending checksum verification is to verify that the artifact is as expected. This ensures that when remote content changes, the Dockerfile also will change and provide a natural docker build cache bust. As a bonus, this also prevents accidentally downloading newer-than-expected artifacts on poorly versioned files.

Below are some examples:

  • Preferred: download over https, PGP key full fingerprint import and asc verification, embedded checksum verified.

    ENV PYTHON_DOWNLOAD_SHA512 (sha512-value-here)
    RUN set -eux; \
        curl -fL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz; \
        curl -fL "https://www.python.org/ftp/python/$PYTHON_VERSION/Python-$PYTHON_VERSION.tar.xz.asc" -o python.tar.xz.asc; \
        export GNUPGHOME="$(mktemp -d)"; \
    # gpg: key F73C700D: public key "Larry Hastings <[email protected]>" imported
        gpg --batch --keyserver keyserver.ubuntu.com --recv-keys 97FC712E4C024BBEA48A61ED3A5CA953F73C700D; \
        gpg --batch --verify python.tar.xz.asc python.tar.xz; \
        rm -r "$GNUPGHOME" python.tar.xz.asc; \
        echo "$PYTHON_DOWNLOAD_SHA512 *python.tar.xz" | sha512sum --strict --check; \
        # install
  • Alternate: full key fingerprint imported to apt which will check signatures and checksums when packages are downloaded and installed.

    RUN set -eux; \
        key='A4A9406876FCBD3C456770C88C718D3B5072E1F5'; \
        export GNUPGHOME="$(mktemp -d)"; \
        gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; \
        gpg --batch --armor --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg.asc; \
        gpgconf --kill all; \
        rm -rf "$GNUPGHOME"; \
        apt-key list > /dev/null
    
    RUN set -eux; \
        echo "deb http://repo.mysql.com/apt/debian/ bookworm mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list; \
        apt-get update; \
        apt-get install -y mysql-community-client="${MYSQL_VERSION}" mysql-community-server-core="${MYSQL_VERSION}"; \
        rm -rf /var/lib/apt/lists/*; \
        # ...

    (As a side note, rm -rf /var/lib/apt/lists/* is roughly the opposite of apt-get update -- it ensures that the layer doesn't include the extra ~8MB of APT package list data, and enforces appropriate apt-get update usage.)

  • Less Secure Alternate: embed the checksum into the Dockerfile.

    ENV RUBY_DOWNLOAD_SHA256 (sha256-value-here)
    RUN set -eux; \
        curl -fL -o ruby.tar.gz "https://cache.ruby-lang.org/pub/ruby/$RUBY_MAJOR/ruby-$RUBY_VERSION.tar.gz"; \
        echo "$RUBY_DOWNLOAD_SHA256 *ruby.tar.gz" | sha256sum --strict --check; \
        # install
  • Unacceptable: download the file over http(s) with no verification.

    RUN curl -fL "https://julialang.s3.amazonaws.com/bin/linux/x64/${JULIA_VERSION%[.-]*}/julia-${JULIA_VERSION}-linux-x86_64.tar.gz" | tar ... \
        # install
Runtime Configuration

By default, Docker containers are executed with reduced privileges: whitelisted Linux capabilities, Control Groups, and a default Seccomp profile (1.10+ w/ host support). Software running in a container may require additional privileges in order to function correctly, and there are a number of command line options to customize container execution. See docker run Reference and Seccomp for Docker for reference.

Official Repositories that require additional privileges should specify the minimal set of command line options for the software to function, and may still be rejected if this introduces significant portability or security issues. In general, --privileged is not allowed, but a combination of --cap-add and --device options may be acceptable. Additionally, --volume can be tricky as there are many host filesystem locations that introduce portability/security issues (e.g. X11 socket).

Security Releases

For image updates which constitute a security fix, there are a few things we recommend to help ensure your update is merged, built, and released as quickly as possible:

  1. Send an email to [email protected] a few (business) days in advance to give us a heads up and a timing estimate (so we can schedule time for the incoming update appropriately).
  2. Include [security] in the title of your pull request (for example, [security] Update FooBar to 1.2.5, 1.3.7, 2.0.1).
  3. Keep the pull request free of changes that are unrelated to the security fix -- we'll still be doing review of the update, but it will be expedited so this will help us help you.
  4. Be active and responsive to comments on the pull request after it's opened (as usual, but even more so if the timing of the release is of importance).

Multiple Architectures

Each repo can specify multiple architectures for any and all tags. If no architecture is specified, images are built in Linux on amd64 (aka x86-64). To specify more or different architectures, use the Architectures field (comma-delimited list, whitespace is trimmed). Valid architectures are found in Bashbrew's oci-platform.go file:

  • amd64
  • arm32v6
  • arm32v7
  • arm64v8
  • i386
  • mips64le
  • ppc64le
  • riscv64
  • s390x
  • windows-amd64

The Architectures of any given tag must be a strict subset of the Architectures of the tag it is FROM.

Images must have a single Dockerfile per entry in the library file that can be used for multiple architectures. This means that each supported architecture will have the same FROM line (e.g. FROM debian:bookworm). See golang, docker, haproxy, and php for examples of library files using one Dockerfile per entry and see their respective git repos for example Dockerfiles.

If different parts of the Dockerfile only happen in one architecture or another, use control flow (e.g.if/case) along with dpkg --print-architecture or apk -print-arch to detect the userspace architecture. Only use uname for architecture detection when more accurate tools cannot be installed. See golang for an example where some architectures require building binaries from the upstream source packages and some merely download the binary release.

For base images like debian it will be necessary to have a different Dockerfile and build context in order to ADD architecture specific binaries and this is a valid exception to the above. Since these images use the same Tags, they need to be in the same entry. Use the architecture specific fields for GitRepo, GitFetch, GitCommit, and Directory, which are the architecture concatenated with hyphen (-) and the field (e.g. arm32v7-GitCommit). Any architecture that does not have an architecture-specific field will use the default field (e.g. no arm32v7-Directory means Directory will be used for arm32v7). See the debian or ubuntu files in the library for examples. The following is an example for hello-world:

Maintainers: Tianon Gravi <[email protected]> (@tianon),
             Joseph Ferguson <[email protected]> (@yosifkit)
GitRepo: https://github.com/docker-library/hello-world.git
GitCommit: 7d0ee592e4ed60e2da9d59331e16ecdcadc1ed87

Tags: latest
Architectures: amd64, arm32v5, arm32v7, arm64v8, ppc64le, s390x
# all the same commit; easy for us to generate this way since they could be different
amd64-GitCommit: 7d0ee592e4ed60e2da9d59331e16ecdcadc1ed87
amd64-Directory: amd64/hello-world
arm32v5-GitCommit: 7d0ee592e4ed60e2da9d59331e16ecdcadc1ed87
arm32v5-Directory: arm32v5/hello-world
arm32v7-GitCommit: 7d0ee592e4ed60e2da9d59331e16ecdcadc1ed87
arm32v7-Directory: arm32v7/hello-world
arm64v8-GitCommit: 7d0ee592e4ed60e2da9d59331e16ecdcadc1ed87
arm64v8-Directory: arm64v8/hello-world
ppc64le-GitCommit: 7d0ee592e4ed60e2da9d59331e16ecdcadc1ed87
ppc64le-Directory: ppc64le/hello-world
s390x-GitCommit: 7d0ee592e4ed60e2da9d59331e16ecdcadc1ed87
s390x-Directory: s390x/hello-world

Tags: nanoserver
Architectures: windows-amd64
# if there is only one architecture, you can use the unprefixed fields
Directory: amd64/hello-world/nanoserver
# or use the prefixed versions
windows-amd64-GitCommit: 7d0ee592e4ed60e2da9d59331e16ecdcadc1ed87
Constraints: nanoserver

See the instruction format section for more information on the format of the library file.

Commitment

Proposing a new official image should not be undertaken lightly. We expect and require a commitment to maintain your image (including and especially timely updates as appropriate, as noted above).

Library definition files

The library definition files are plain text files found in the library/ directory of the official-images repository. Each library file controls the current "supported" set of image tags that appear on the Docker Hub description. Tags that are removed from a library file do not get removed from the Docker Hub, so that old versions can continue to be available for use, but are not maintained by upstream or the maintainer of the official image. Tags in the library file are only built through an update to that library file or as a result of its base image being updated (ie, an image FROM debian:bookworm would be rebuilt when debian:bookworm is built). Only what is in the library file will be rebuilt when a base has updates.

Given this policy, it is worth clarifying a few cases: backfilled versions, release candidates, and continuous integration builds. When a new repository is proposed, it is common to include some older unsupported versions in the initial pull request with the agreement to remove them right after acceptance. Don't confuse this with a comprehensive historical archive which is not the intention. Another common case where the term "supported" is stretched a bit is with release candidates. A release candidate is really just a naming convention for what are expected to be shorter-lived releases, so they are totally acceptable and encouraged. Unlike a release candidate, continuous integration builds which have a fully automated release cycle based on code commits or a regular schedule are not appropriate.

It is highly recommended that you browse some of the existing library/ file contents (and history to get a feel for how they change over time) before creating a new one to become familiar with the prevailing conventions and further help streamline the review process (so that we can focus on content instead of esoteric formatting or tag usage/naming).

Filenames

The filename of a definition file will determine the name of the image repository it creates on the Docker Hub. For example, the library/ubuntu file will create tags in the ubuntu repository.

Tags and aliases

The tags of a repository should reflect upstream's versions or variations. For example, Ubuntu 14.04 is also known as Ubuntu Trusty Tahr, but often as simply Ubuntu Trusty (especially in usage), so ubuntu:14.04 (version number) and ubuntu:trusty (version name) are appropriate aliases for the same image contents. In Docker, the latest tag is a special case, but it's a bit of a misnomer; latest really is the "default" tag. When one does docker run xyz, Docker interprets that to mean docker run xyz:latest. Given that background, no other tag ever contains the string latest, since it's not something users are expected or encouraged to actually type out (ie, xyz:latest should really be used as simply xyz). Put another way, having an alias for the "highest 2.2-series release of XYZ" should be xyz:2.2, not xyz:2.2-latest. Similarly, if there is an Alpine variant of xyz:latest, it should be aliased as xyz:alpine, not xyz:alpine-latest or xyz:latest-alpine.

It is strongly encouraged that version number tags be given aliases which make it easy for the user to stay on the "most recent" release of a particular series. For example, given currently supported XYZ Software versions of 2.3.7 and 2.2.4, suggested aliases would be Tags: 2.3.7, 2.3, 2, latest and Tags: 2.2.4, 2.2, respectively. In this example, the user can use xyz:2.2 to easily use the most recent patch release of the 2.2 series, or xyz:2 if less granularity is needed (Python is a good example of where that's most obviously useful -- python:2 and python:3 are very different, and can be thought of as the latest tag for each of the major release tracks of Python).

As described above, latest is really "default", so the image that it is an alias for should reflect which version or variation of the software users should use if they do not know or do not care which version they use. Using Ubuntu as an example, ubuntu:latest points to the most recent LTS release, given that it is what the majority of users should be using if they know they want Ubuntu but do not know or care which version (especially considering it will be the most "stable" and well-supported release at any given time).

Instruction format

The manifest file format is officially based on RFC 2822, and as such should be familiar to folks who are already familiar with the "headers" of many popular internet protocols/formats such as HTTP or email.

The primary additions are inspired by the way Debian commonly uses 2822 -- namely, lines starting with # are ignored and "entries" are separated by a blank line.

The first entry is the "global" metadata for the image. The only required field in the global entry is Maintainers, whose value is comma-separated in the format of Name <email> (@github) or Name (@github). Any field specified in the global entry will be the default for the rest of the entries and can be overridden in an individual entry.

# this is a comment and will be ignored
Maintainers: John Smith <[email protected]> (@example-jsmith),
             Anne Smith <[email protected]> (@example-asmith)
GitRepo: https://github.com/example/docker-example.git
GitCommit: deadbeefdeadbeefdeadbeefdeadbeefdeadbeef

# this is also a comment, and will also be ignored

Tags: 1.2.3, 1.2, 1, latest
Directory: 1

Tags: 2.0-rc1, 2.0-rc, 2-rc, rc
GitRepo: https://github.com/example/docker-example-rc.git
GitFetch: refs/heads/2.0-pre-release
GitCommit: beefdeadbeefdeadbeefdeadbeefdeadbeefdead
Directory: 2
File: Dockerfile-to-use

Bashbrew will fetch code out of the Git repository (GitRepo) at the commit specified (GitCommit). If the commit referenced is not available by fetching master of the associated GitRepo, it becomes necessary to supply a value for GitFetch in order to tell Bashbrew what ref to fetch in order to get the commit necessary.

The built image will be tagged as <manifest-filename>:<tag> (ie, library/golang with a Tags value of 1.6, 1, latest will create tags of golang:1.6, golang:1, and golang:latest).

Optionally, if Directory is present, Bashbrew will look for the Dockerfile inside the specified subdirectory instead of at the root (and Directory will be used as the "context" for the build instead of the top-level of the repository). If File is present, the specified filename instead of Dockerfile will be used.

See the multi-arch section for details on how to specify a different GitRepo, GitFetch, GitCommit, or Directory for a specific architecture.

Creating a new repository

  • Create a new file in the library/ folder. Its name will be the name of your repository on the Hub.
  • Add your tag definitions using the appropriate syntax (see above).
  • Create a pull request adding the file from your forked repository to this one. Please be sure to add details as to what your repository does.

Adding a new tag in an existing repository (that you're the maintainer of)

  • Add your tag definition using the instruction format documented above.
  • Create a pull request from your Git repository to this one. Please be sure to add details about what's new, if possible.

Change to a tag in an existing repository (that you're the maintainer of)

  • Update the relevant tag definition using the instruction format documented above.
  • Create a pull request from your Git repository to this one. Please be sure to add details about what's changed, if possible.

Bashbrew

Bashbrew (bashbrew) is a tool for cloning, building, tagging, and pushing the Docker official images. See the Bashbrew README for more information.

official-images's People

Contributors

31z4 avatar alcohol avatar archlinux-github avatar cap10morgan avatar carlossg avatar clrbuilder avatar d-fence avatar djelibeybi avatar docker-library-bot avatar getong avatar j0wi avatar jennyowen avatar jsternberg avatar keeganwitt avatar kozlovic avatar kvs85 avatar ldez avatar luigidellaquila avatar mikaelarguedas avatar ncopa avatar sfackler avatar shin- avatar simenb avatar sl-team avatar thresheek avatar tianon avatar tilosp-bot avatar vanosg avatar volmarl avatar yosifkit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

official-images's Issues

Provide jetty image

I'd be nice to have a jetty image based on the _/java one.

It would have to expose tags with different combination of debian/java/jetty version, and default :latest to the sable combinaison (if any) of all 3.

Example:

jetty:8-java6-wheezy
jetty:8-java6-jessie
jetty:9-java7-jessie
jetty:9-java8-experimental

I'm not sure if a :onbuild version would make sense, given that:

  • the build usually happens outside of docker
  • deps are assembled outside of docker by maven and go
  • the entrypoint would be fixed to jetty

/cc @ludoch @ndeloof

Images built using scratch as parent image are bigger

I'm the maintainer of the official openSUSE image. I just noticed the Docker image built using brew has a size of 598.3 MB, while the same image imported into docker is only 258.3 MB.

How to reproduce the problem

First of all you need to checkout the openSUSE-13.1 branch from this repository.

Then:

docker import - small_opensuse < openSUSE-13.1.tar.xz
docker build -t big_opensuse .
docker images | grep opensuse

Do you have any idea, maybe that a bug related with Docker itself.

addgroup fails

docker run -i -t stackbrew/ubuntu:12.04 /bin/bash
apt-get install -y ssh-client
...
Setting up openssh-client (1:5.9p1-5ubuntu1.4) ...
groupadd: failure while writing changes to /etc/group
addgroup: `/usr/sbin/groupadd -g 102 ssh' returned error code 10. Exiting.
dpkg: error processing openssh-client (--configure):
subprocess installed post-installation script returned error exit status 1
Setting up xauth (1:1.0.6-1) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Errors were encountered while processing:
openssh-client
E: Sub-process /usr/bin/dpkg returned an error code (1)

Glibc 2.18 updates

Ensure all repositories have been updated for glibc 2.18 or higher.

Note: This issue is public as as it is in regard to a publicly disclosed vulnerability.

  • centos
  • crux
  • debian
  • mageia
  • oraclelinux
  • ubuntu
  • ubuntu-debootstrap

Need some clear information wrt Docker version

I expect that https://groups.google.com/forum/#!topic/docker-user/pF8M6xFmxsM is due to these images relying on functionality that is not available, or functional in older Docker versions.

I could not find any Docker version requirement / testing information, so we should add this (and if an image can tell a user it won't work, even better)

at minimum, it would be good to have an indication of what Docker versions an image has been tested to work correctly on.

Partial update for new CentOS images

Not sure if this is caused by the removal of a legacy image or not, however yesterday we submitted a pull request for a new CentOS7 image as well as an updated CentOS 6 one. Shortly after this merge, I asked Joffrey to remove a legacy CentOS 6.4 image, which he did. I'm wondering if this might have caused a disruption with the index syncing the 7 image properly.

The updated CentOS6 image showed up, but the new CentOS 7 image did not.

(It's entirely possible that I'm being impatient, in which case I apologize)

Centos images could change between pulls

(Apologies if this is the wrong spot for this issue)

Docker.com user vsipuli said it well:

Would it be possible to provide tags with minor (and perhaps even patch) versions? Currently it seems impossible to do repeatable builds with the CentOS images, because โ€œcentos:centos6โ€ might change the minor version at any time.

License?

I want to borrow some code from this project ( specifically around doing docker builds with docker-py ) but it's unclear what license it's under and if I can use it, and how I should attribute it.

hello-world

So, @SvenDowideit mentioned in moby/moby#6855 (comment) that he'd like to have a "hello-world" image. I can create it trivially, and in assembly so it's supertiny and downloads superfast, but I want to make sure that's something we want first. For the record, I'm +1 on it myself, but I'm biased because I think the "tianon/true" image is amazing. :)

cc @shin-

Provide a shared layer with the Ubuntu base image

For building Heroku stack images, we would want to share a common layer with the stock Ubuntu images.

I think there are two ways of doing this.

One approach is if the Dockerfile(s) in @tianon's docker-brew-ubuntu repository could have two steps; the first will import a tarball that is the base image and the next will install additional packages (namely the ubuntu-minimal). This would allow us to import the same tarball and base the rest of our image on that.

Another approach is that you offer base images alongside the existing ones (i.e. ubuntu:precise and ubuntu:precise-base). I strongly prefer this as we can rely on the BASE instruction to keep us on the same base instead of trusting a tarball import to yield the same layer. If ubuntu:precise extends ubuntu:precise-base then becomes irrelevant to us, although it seems like that would be ideal.

What do you think?

Introduce JENKINS_OPTS

can be used to pass jenkins args using --env or to set in derived docker image as ENV JENKINS_OPT

ubuntu:14.04 and 14.10 images don't work with overlayfs storage driver

root@callisto ~/of $ docker run --rm ubuntu:14.04 date
FATA[0000] Error response from daemon: mkdir /home/docker/overlay/c4860be5339b61850b55c2492155bad3d14cc428607f7273780640f472303103-init/merged/dev/shm: invalid argument
root@callisto ~/of $ docker run --rm ubuntu:14.10 date
FATA[0000] Error response from daemon: mkdir /home/docker/overlay/a38b89871a4f8073c0123985396f4048199b3c89a7e4d4e1eccef11e18f81df5-init/merged/dev/shm: invalid argument
root@callisto ~/of $ docker run --rm ubuntu:15.04 date
Sat Dec 27 10:41:08 UTC 2014
root@callisto ~/of $ docker info
Containers: 15
Images: 20
Storage Driver: overlay
Execution Driver: native-0.2
Kernel Version: 3.18.1-031801-generic
Operating System: Ubuntu 14.04.1 LTS
CPUs: 2
Total Memory: 3.791 GiB
Name: callisto
ID: ZWU6:UVBQ:HL5R:AAB5:GKYQ:2MSR:UPQW:TN6H:32C4:JJFX:WLWA:YPNZ
WARNING: No swap limit support

This is related to moby/moby#9820.

CVE-2014-6271 (shellshock)

Ok, Debian and Ubuntu images were updated last night for CVE-2014-6271, but due to some propagation delays some of the images didn't get updated correctly. Here's the lay of the land:

Updated properly:

  • debian:stable, debian:wheezy
  • ubuntu:utopic
  • ubuntu-debootstrap (all supported tags)

Currently in-progress rebuilding right now to include the update:

  • debian:oldstable, debian:squeeze, debian:unstable, debian:sid
  • ubuntu:precise, ubuntu:trusty

I'll close this bug with the PR that updates the images, after which they'll shortly be rebuilt (at which point I'll force all the other images to rebuild as well).

Please update base images frequently.

I see a pattern in many Dockerfiles that looks like this:

FROM debian
RUN apt-get update
RUN apt-get --assume-yes dist-upgrade

This is redundant and misplaced--it shouldn't be the responsibility of the dependent containers to update the base images.

Can you rebuild the base images frequently enough that apt-get update isn't necessary in the dependent containers? Daily? Hourly if need be?

Another benefit is that dependent builds would benefit from important security updates quickly (like the Heartbleed fix).

Effectively immutable tags taken from mutable ones

I find it very inconvenient that once an image such as debian:jessie (which is by nature a mutable reference) gets updated, there is no way to refer to the previous version, at least not without doing some introspection & local tagging when some images based on the previous one are still around on some machine.

It's probably an anti-pattern to inherit from such a mutable tag, at least if repeatability is a requirement. For the use cases where an image requires a certain snapshot of an image which is not semantically tagged, couldn't we provide date-suffixed tags, such as jessie_20140723, the date being the time of generation of the image?

I am aware this would introduce complexity when maintaining images (that date would need to be manually bumped to trigger the rebuild, and the previous one would just be laying in the registry), but how does it currently work anyway when an image needs to be rebuilt, even though the Dockerfile itself didn't change?

See boot2docker/boot2docker#440 for a symptom of this problem. I had similar issue when pulling by accident ubuntu:precise, and realizing that the latest LTS release brought changes that broke the flow downstream (actually, in that case, there is actually a semantic versioning, ubuntu:12.04.4 so that would be the easy way out).

Add Ubuntu 14.04 LTS, make this the 'latest' tag as well?

Ubuntu 14.04 LTS was released this week. Any chance for adding this to the repository?

Since this is now the current LTS version, the 'latest' tag probably should be pointing to 14.04 as well, but this may break existing Dockerfiles that don't explicitly specify a tag and expect 'latest' to be 12.04. Any ideas on this?

removal of 20 tag on fedora image

This was discussed on #docker-library on freenode and I was told older tags would be kept on hub, even though unsupported.

But, since the present f20 image doesn't have rel-eng approval, fedora is hoping to remove the :20 tag from the fedora image once f21 is released, so that we can call the whole thing official.

Comments?

/cc @mattdm @kushaldas @tianon @yosifkit

Installing libboost-all-dev on top of ubuntu:14.04 fails

Hope this is the right place to report this. If not, let me know where.

The Dockerfile below is failing to build on hub.docker.com:

FROM ubuntu:14.04

RUN apt-get update && apt-get install -y \
  libboost-all-dev 

The failure is:

Processing triggers for libgdk-pixbuf2.0-0:amd64 (2.30.7-0ubuntu1) ... 
๏ฟฝ[91mErrors were encountered while processing:
๏ฟฝ[0m 
๏ฟฝ[91m dictionaries-common
 aspell
 aspell-en
 hunspell-en-us
 libenchant1c2a:amd64
 libwebkitgtk-3.0-0:amd64
 enchant
 libyelp0
 yelp
 gnome-user-guide
 zenity
 unity-control-center
๏ฟฝ[0m 
๏ฟฝ[91m unity-control-center-signon
 indicator-bluetooth
๏ฟฝ[0m 
๏ฟฝ[91mE: Sub-process /usr/bin/dpkg returned an error code (1)๏ฟฝ[0m

and here is a link to the complete failure logs

I know this used to work very recently, because I have an automated build that includes that dependency, and it succeeded on 2014-12-07. Here are the build results from that build, and if you look in the Dockerfile that's emitted as part of the automated build, you can see it includes the libboost-all-dev.

I tried this on a local Vagrant image running CoreOS, and it worked fine:

$ sudo docker run -ti ubuntu:14.04 /bin/bash

From inside the ubuntu:14.04 docker image:

# apt-get update && apt-get install -y libboost-all-dev

And it worked, which made me think the error was specific to dockerhub.

Private registry support

I noticed three places with evidence for the fact that private registry support is pending for Stackbrew. When will this be supported, and what is holding it from being implemented? I am thinking about building a build automation tool for automating builds and pushing them to my own private docker-registry for internal usage.

7240ebe#diff-1ab3731c35e3b3e7a24b7903cc3070c5R113

003ff94#diff-fd5a42669234babfc156256bf5b0a2d3R48

8ec6a5d#diff-8f0a3f9f1fed845ca005797acb6d4e79L193

Debian Jessie as default

If I understand correctly, buildpack-deps by default points to jessie - and this seems to be used by official images (langpacks - at least python).

If so, that means we have no timely security support from upstream?

Is that correct?

Thanks!

cc @tianon @samalba

UTC ALL THE THINGS

date +%Z โ†’ UTC

Created an issue for it so we can track completion. ๐Ÿ‘

bashbrew: if a build fails, images FROM it still try to build

Today I've been having tons of transitory issues with APT mirrors (Hash Sum Mismatch, closed connection, etc), which have been failing some of my builds. Normally, I'd just restart them; no harm, no foul. In the case of bashbrew though, when a build fails, the deferred images that build FROM it still build, so after I start the build over they have to rebuild again. Couple this with the fact that we didn't set up a Ctrl+C trap in build.sh yet, and I'm in a world of hurt cancelling builds so I can try them again.

My suggested solution would be that we make a new associative array to track "failed builds" and if our current image is FROM an image that failed to build, we just fail immediately (and record ourselves as having failed appropriately so our deps get failed also, cascading cleanly -- ie, if buildpack-deps:jessie fails, so will python:3, and thus hylang:*).

As a side benefit, this could also let us add some nice "Failed Builds Summary" output to the end of the script output, which would be helpful IMO. We might as well make the associative array field value be the path to the log file too, so that our status output could include it.

Add some traceability info to official repositories/images

One should be able to trace, from the docker index, the source of the official images, how they have been made, who's responsible, and how to report issues.

A use case, for instance, is how to report that an official image for Debian must be made for the latest update of the stable distribution... One should be able to contact the maintainer, and eventually file an issue at the proper repo.

In that case, I'd expect to be able to navigate from https://index.docker.io/_/debian/ to https://github.com/tianon/docker-brew-debian

You may find some related discussion in moby/moby#769 although I think that something more formal than textual description is needed in that case.

Hope this helps.

Running C++ Applications built with Visual Studio

Using the instructions provided, it appears trying to compile and run a C++ application isn't supported well yet.

docker@boot2docker:/c/Users/Kevin/Documents/Docker/mono-c-plus-plus-app$ docker build -t c-plus-plus-app .
Sending build context to Docker daemon 9.178 MB
Sending build context to Docker daemon
Step 0 : FROM mono:3.10-onbuild
# Executing 4 build triggers
Trigger 0, COPY . /usr/src/app/source
Step 0 : COPY . /usr/src/app/source
Trigger 1, RUN nuget restore -NonInteractive
Step 0 : RUN nuget restore -NonInteractive
 ---> Running in 71c7e0ff901e
Trigger 2, RUN xbuild /property:Configuration=Release /property:OutDir=/usr/src/app/build/
Step 0 : RUN xbuild /property:Configuration=Release /property:OutDir=/usr/src/app/build/
 ---> Running in 7e7a6643c86a
XBuild Engine Version 12.0
Mono, Version 3.10.0.0
Copyright (C) 2005-2013 Various Mono authors

Build started 01/16/2015 05:57:59.
__________________________________________________
/usr/src/app/source/CPlusPlusApp.sln:  warning : Ignoring vcproj 'CPlusPlusApp'.
/usr/src/app/source/CPlusPlusApp.sln:  warning : Failed to find project eb424bc8-47bf-421e-b413-138c2483497f
Project "/usr/src/app/source/CPlusPlusApp.sln" (default target(s)):
        Target ValidateSolutionConfiguration:
                Building solution configuration "Release|Win32".
Done building project "/usr/src/app/source/CPlusPlusApp.sln".

Build succeeded.

Warnings:

/usr/src/app/source/CPlusPlusApp.sln:  warning : Ignoring vcproj 'CPlusPlusApp'.
/usr/src/app/source/CPlusPlusApp.sln:  warning : Failed to find project eb424bc8-47bf-421e-b413-138c2483497f

         2 Warning(s)
         0 Error(s)

Time Elapsed 00:00:00.1701750
Trigger 3, WORKDIR /usr/src/app/build
Step 0 : WORKDIR /usr/src/app/build
 ---> Running in b275c3ac8a4e
 ---> 0920b257cda5
Removing intermediate container 71c7e0ff901e
Removing intermediate container 7e7a6643c86a
Removing intermediate container b275c3ac8a4e
Removing intermediate container fbe7593d732e
Step 1 : CMD mono ./CPlusPlusApp.exe
 ---> Running in 69b034929140
 ---> 1698b5a50a0a
Removing intermediate container 69b034929140
Successfully built 1698b5a50a0a
docker@boot2docker:/c/Users/Kevin/Documents/Docker/mono-c-plus-plus-app$ docker run c-plus-plus-app
Cannot open assembly './CPlusPlusApp.exe': No such file or directory.
docker@boot2docker:/c/Users/Kevin/Documents/Docker/mono-c-plus-plus-app$

Minimize image footprints

Sorry, if this may not be the right place to discuss this. But as a newcomer I came across this article

http://jonathan.bergknoff.com/journal/building-good-docker-images

which I mostly agree to. Now looking at the official images I seet that most (all?) of them compile from sources (e.g. mysql) and thus also always contain the build tools. I wonder why this is neccessary. Wouldn't it be easier and eat up less image space to just install the respective debian packages instead?

bump docker build daemon

The current build server uses 0.10.0 to build the official images. This should be updated to the latest docker.

This (as far as I can tell) has caused an issue on the wordpress build (docker-library/wordpress#4) where a layer deleting files does nothing.

$ docker history --no-trunc wordpress
IMAGE                                                              CREATED             CREATED BY                                                                                                                                                       SIZE
7833f968b4947a1f3afa17310e40a17d5a65efd1d499ee932330926c5f41f440   11 days ago         /bin/sh -c #(nop) CMD [apache2 -DFOREGROUND]                                                                                                                     0 B
8768d709f4174518805c988c4fc5256286d27a5df9b65649d1da84126f9b1947   11 days ago         /bin/sh -c #(nop) EXPOSE map[80/tcp:{}]                                                                                                                          0 B
5558d195c659515eb9d205991c17f096ce94a5b1cd7ef4631fc1c66d9f6c17d5   11 days ago         /bin/sh -c #(nop) ENTRYPOINT [/usr/src/wordpress/docker-entrypoint.sh]                                                                                           0 B
622d0a732c5e7b1bdb9f899be01b218bd35bf802f7ceeda510c8b941fc42981e   11 days ago         /bin/sh -c cp /usr/src/wordpress/docker-apache.conf /etc/apache2/sites-available/wordpress.conf && a2dissite 000-default && a2ensite wordpress                   209 B
678ec04f4c8d19320f343e1ff00d2e019f2eb51b89743971ae36ecf3cc2a06e1   11 days ago         /bin/sh -c #(nop) ADD dir:c822fefe6517e67c64f379da0cf1e668cfcc8c244dd1081e010e13514ce7ccba in /usr/src/wordpress                                                 112.8 MB
e1da781fdc940173accf19ec65fad2a8937916dc86cb59a61bc505bd764fb390   8 weeks ago         /bin/sh -c find "$APACHE_CONFDIR" -type f -exec sed -ri ' s!^(\s*CustomLog)\s+\S+!\1 /proc/self/fd/1!g; s!^(\s*ErrorLog)\s+\S+!\1 /proc/self/fd/2!g;' '{}' ';'   88.83 kB
4b81b0d579cabb2a98ae7be940cfea2c892d4e04ade5b1630e0eac15445d1f4b   8 weeks ago         /bin/sh -c mkdir -p $APACHE_RUN_DIR $APACHE_LOCK_DIR $APACHE_LOG_DIR                                                                                             8 B
ea3b57cd476283010b7ba8c8d5ca8070dd3b3565a53d6571313e4391a0cb11f5   8 weeks ago         /bin/sh -c #(nop) ENV LANG=C                                                                                                                                     0 B
3c694ca0b2286e99cae2f4d14d7d0c7887fcaeacbf2749da3780afe8f97e3b3b   8 weeks ago         /bin/sh -c #(nop) ENV APACHE_LOG_DIR=/var/log/apache2                                                                                                            0 B
e3bd56f5c6a30d46a61ce4b421b13738ba7cc9ddeee37b08fc4279ba222015ea   8 weeks ago         /bin/sh -c #(nop) ENV APACHE_LOCK_DIR=/var/lock/apache2                                                                                                          0 B
626096bb06b1f9e6b9dd380eadf884b456b93913e3181af0759654fea6ff2e70   8 weeks ago         /bin/sh -c #(nop) ENV APACHE_PID_FILE=/var/run/apache2/apache2.pid                                                                                               0 B
98d143d5e3294a708b314cc7734983c0e7b64bc7fbc2735d3d025ac5146fbc97   8 weeks ago         /bin/sh -c #(nop) ENV APACHE_RUN_DIR=/var/run/apache2                                                                                                            0 B
947395580dcc32868f3c2365a7ce413e3ccdd9794685ce0e678c63e59ed99ffc   8 weeks ago         /bin/sh -c #(nop) ENV APACHE_RUN_GROUP=www-data                                                                                                                  0 B
ef39710cd47b4cff6e8357478d8852ef6462fe05b59e4f33664bcfb336e520a7   8 weeks ago         /bin/sh -c #(nop) ENV APACHE_RUN_USER=www-data                                                                                                                   0 B
9ea7948ff51c6d871778e77ebe28c9df9ceeffc07d9812ae64b92f5cffa776b0   8 weeks ago         /bin/sh -c #(nop) ENV APACHE_ENVVARS=/etc/apache2/envvars                                                                                                        0 B
6e127ef330e7bb1e26190f7a5d64ecd097494c0b7fadf0fb8977fa973d8e2ae3   8 weeks ago         /bin/sh -c #(nop) ENV APACHE_CONFDIR=/etc/apache2                                                                                                                0 B
f615b62e918ca6eb5936c24e01f0200429134d2fa4c4724ad64eb64542639af3   8 weeks ago         /bin/sh -c #(nop) WORKDIR /var/www/html                                                                                                                          0 B
92c982394c2e0d9700be648f4378e7989bf86766fa188424270d98c99f1c9cee   8 weeks ago         /bin/sh -c rm -rf /var/www/html && mkdir /var/www/html                                                                                                           8 B
60f62ed4f33767e7ead40c766c724fc5ff4471569a934b414f5f4503724442e7   8 weeks ago         /bin/sh -c a2enmod rewrite                                                                                                                                       38 B
13c1896b5563f76eafb92e201cee53d713c0be1bff243f194d74bac6026c9938   8 weeks ago         /bin/sh -c apt-get update && apt-get install -y  apache2  curl  libapache2-mod-php5  php5-curl  php5-gd  php5-mysql  rsync  wget                                 139.5 MB
f106b5d7508a201e2501078bb96d877cf50cf0b799242bea90aba294fa9539ac   9 weeks ago         /bin/sh -c #(nop) CMD [/bin/bash]                                                                                                                                0 B
1e8abad02296ab9c600564b43d4f3e34855cfd40433f32e2ba90aaab37b07f7d   9 weeks ago         /bin/sh -c #(nop) ADD file:bf31c4f934dcaac38efdd7b23a0f0231c414ed6bd103009a0f4b31c06154460d in /                                                                 121.8 MB
511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158   13 months ago                                                                                                                                                                        0 B

$ docker run -it --rm f615b62e918ca6eb5936c24e01f0200429134d2fa4c4724ad64eb64542639af3
root@f9b9b51df291:/var/www/html# ls
index.html
root@f9b9b51df291:/var/www/html# exit

bashbrew: need a way to build all dependent images too

If I ./bashbrew/build.sh buildpack-deps to build-test a new version of the image, it'd be great if it would/could optionally also rebuild everything that's FROM buildpack-deps (with some kind of --also-children or something).

Maybe we could even have an --also-parents that rebuilds images upwards too, to make it easier to test the full stack of an image's build without knowing it beforehand (ie, I could ./bashbrew/build.sh --also-parents hylang:latest and have it build debian:jessie, then buildpack-deps:jessie, then python:3, and finally build hylang:latest). This one is a LOT easier to implement than --also-children would be, so maybe it's a good place to start?

People keep confusing "dockerfile" with the official library

See stuartpb/dokku-rethinkdb-plugin#7 (comment) - I've also gotten an email (on 2014-06-01, when the actual official library was just starting out) asking me why I wasn't using "the official dockerfile image" of RethinkDB because I was using crosbymichael/rethinkdb (which largely looks like what the official rethinkdb image would come to look like) instead of dockerfile/rethinkdb (which... doesn't).

I'm trying to be diplomatic here, but it seems to me that the existence of https://registry.hub.docker.com/repos/dockerfile/, using the Docker logo as its avatar, is problematic with the existence of an actual official library. If it was just called pilwon/, that would be fine, but the choice of name leads people to think dockerfile/ is the "official prefix" for "official Docker images", leading them to miss the actual official repos under /_/ altogether.

I imagine the same confusion would apply for base/ and dockerfiles/, were they publishing updates regularly.

Rebuild Debian images to address DSA 2972-1

In response to CVE-2014-4699 (reserved but not yet filled out at time of this issue according to NVD) the Debian project has released DSA 2972-1.

http://seclists.org/bugtraq/2014/Jul/12

This (very cute) vulnerability allows an unprivileged user to execute a nasty ptrace trick on x86_64 chips and crash the kernel. I assume that this can happen from docker containers as well.

At the time of this writing, the DSA mentions fixes for wheezy but explicitly not for sid while leaving out jessie entirely.

For the stable distribution (wheezy), this problem has been fixed in
version 3.2.60-1+deb7u1. In addition, this update contains several
bugfixes originally targeted for the upcoming Wheezy point release.

For the unstable distribution (sid), this problem will be fixed soon.

Therefore, rebuilding all images right now might not fix things but a stable image rebuild would fix things there.

NINJA EDIT: @tianon

library: can memcached be added?

Hello,

Excellent work on the release of all the official builds for Redis, MongoDB, MySQL and PostgreSQL!!! โœจ

While I know there are several memcached images in the registry/hub, it will be great all of them are provided using the same mechanism as the others in the library and reduce disk usage thanks to reuse of base image.

Thank you!

Ubuntu 12.04 problem

The latest 12.04 ubuntu image
"id": "1edb91fcb5b5c2a0548557d95eb217808b0599ccddc8641a0583cfb2845793c6",
"parent": "d8d201f58bb572ebf2c789e103b013b23080de71054a6bf806aba85314d425ef",
"created": "2014-04-22T22:01:35.599486201Z"

seems a bit broken. For instance, there is no /bin/ping.
It seems to have fewer packages installed, 103 compared to 143 in a previous image:
"id": "c0fe63f9a4c182d87029fcb87fe88c7eac448226b245926b99ba3d3d082ca468",
"parent": "79fdb1362c848d06252eb2cb466fe196d1f852b11d8c4532b21dfd9c64cfa632",
"created": "2014-04-09T18:28:40.391001078Z",

Anyone else experiencing this problem? Is it supposed to be like this?

Insufficient free space for journal files

I am getting the same error as mentioned here: dockerfile/mongodb#9

Booting up the container has worked for me fine multiple times and then all of the sudden it just stopped working without any apparent reason.

If I change my project to use another db container (e.g. postgres) it works, but would like to use mongo. Any idea what the issue could be, since hard disk space shouldn't be it.

Why can't connect Mac boot2docker mysql images?

HI ALL,
I pull the docker mysql:5.7.5 images, and can connect use this command:

docker run -it --link some-mysql:mysql --rm mysql sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"' 

but can't connect use mac mysql client, I use Navicat for Mysql. Do I have something missed? Thanks.

screen shot 2015-02-02 at 11 33 50 am

screen shot 2015-02-02 at 11 33 58 am

Rebuild Debian images to address Wheezy 7.6

My dearest @tianon,

My heart aches in the fiery pangs of your absence. Each sunrise without you brings melancholy upon me as my constitution weakens. Good thing the Debian project released 7.6 today, ya feel me?

https://www.debian.org/News/2014/20140712

This update mainly adds corrections for security problems to the stable release, along with a few adjustments for serious problems. Security advisories were already published separately and are referenced where available.

Also, two DSAs came out this morning, one for libav and one for libxml2.

Since neither of these come in the base image by default, we should be all good on that front.

xoxoxox
-JEM

Make /root directory on Ubuntu 755 instead of 700

Because of issue with aufs (moby/moby#8514) it is not really possible to change permissions of the /root directory to 755 and allow programs running under a different user inside a container to access it. I would suggest that permissions are changed to 755. It is running inside a container anyway so such default is more reasonable.

CentOS7: Couchbase server expects /etc/init.d/functions to be there

I'm trying to install Couchbase Server with this dockerfile:

https://github.com/couchbaselabs/couchbase-server-docker/blob/master/3.0.1/Dockerfile

but the /etc/init.d/couchbase-server script expects an /etc/init.d/functions file, which is not in the CentOS image.

https://gist.github.com/tleyden/b46eedf729006d71fd36#file-gistfile1-txt-L23

And so it gives an error: /etc/init.d/couchbase-server: line 22: /etc/init.d/functions: No such file or directory

Any idea why /etc/init.d/functions is not on the CentOS7 image? When I installed CentOS7 from CentOS-7.0-1406-x86_64-DVD.iso, it contained an /etc/init.d/functions file.

Steps to reproduce:

$ sudo docker run -ti centos /bin/bash
$ yum install -y wget pkgconfig openssl tar hostname
$ rpm --install http://packages.couchbase.com/releases/3.0.1/couchbase-server-community-3.0.1-centos6.x86_64.rpm

Result:

Warning: Swappiness is not 0.
You can set the swappiness at runtime with
sysctl vm.swappiness=0
Minimum RAM required  : 4 GB
System RAM configured : 3.67 GB

Minimum number of processors required : 4 cores
Number of processors on the system    : 1 cores



/etc/init.d/couchbase-server: line 22: /etc/init.d/functions: No such file or directory

You have successfully installed Couchbase Server.
Please browse to http://f63f31b276ba:8091/ to configure your server.
Please refer to http://couchbase.com for additional resources.

Please note that you have to update your firewall configuration to
allow connections to the following ports: 11211, 11210, 11209, 4369,
8091, 8092, 18091, 18092, 11214, 11215 and from 21100 to 21299.

By using this software you agree to the End User License Agreement.
See /opt/couchbase/LICENSE.txt.

Build order

We need a way to specify build order of images that inherit from other images.

Example, many images are FROM debian and it is bad that a security update on debian would possibly take two build cycles to get it. This is also apparent in the rails image which now inherits from ruby and fails to build on the old ruby (#113, #120).

ubuntu-upstart:12.04: Can't install cron

root@7ee4f5fd534e:/# apt-get install cron
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  anacron logrotate checksecurity exim4 postfix mail-transport-agent
The following NEW packages will be installed:
  cron
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 85.0 kB of archives.
After this operation, 308 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ precise-updates/main cron amd64 3.0pl1-120ubuntu4 [85.0 kB]
Fetched 85.0 kB in 0s (403 kB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package cron.
(Reading database ... 8311 files and directories currently installed.)
Unpacking cron (from .../cron_3.0pl1-120ubuntu4_amd64.deb) ...
Setting up cron (3.0pl1-120ubuntu4) ...
Adding group `crontab' (GID 103) ...
Done.
start: Job failed to start
invoke-rc.d: initscript cron, action "start" failed.
dpkg: error processing cron (--configure):
 subprocess installed post-installation script returned error exit status 1
E: Sub-process /usr/bin/dpkg returned an error code (1)
root@7ee4f5fd534e:/# 

Note also that the runlevel command returns unknown. Is that correct?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.