1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Fixed remaining issues and conflicts created by last merge.

This commit is contained in:
Thatcher Peskens 2013-04-23 12:04:53 -07:00
commit 1ddca1948b
18 changed files with 255 additions and 156 deletions

77
CHANGELOG.md Normal file
View file

@ -0,0 +1,77 @@
# Changelog
## 0.1.8 (2013-04-22)
- Dynamically detect cgroup capabilities
- Issue stability warning on kernels <3.8
- 'docker push' buffers on disk instead of memory
- Fix 'docker diff' for removed files
- Fix 'docker stop' for ghost containers
- Fix handling of pidfile
- Various bugfixes and stability improvements
## 0.1.7 (2013-04-18)
- Container ports are available on localhost
- 'docker ps' shows allocated TCP ports
- Contributors can run 'make hack' to start a continuous integration VM
- Streamline ubuntu packaging & uploading
- Various bugfixes and stability improvements
## 0.1.6 (2013-04-17)
- Record the author an image with 'docker commit -author'
## 0.1.5 (2013-04-17)
- Disable standalone mode
- Use a custom DNS resolver with 'docker -d -dns'
- Detect ghost containers
- Improve diagnosis of missing system capabilities
- Allow disabling memory limits at compile time
- Add debian packaging
- Documentation: installing on Arch Linux
- Documentation: running Redis on docker
- Fixed lxc 0.9 compatibility
- Automatically load aufs module
- Various bugfixes and stability improvements
## 0.1.4 (2013-04-09)
- Full support for TTY emulation
- Detach from a TTY session with the escape sequence `C-p C-q`
- Various bugfixes and stability improvements
- Minor UI improvements
- Automatically create our own bridge interface 'docker0'
## 0.1.3 (2013-04-04)
- Choose TCP frontend port with '-p :PORT'
- Layer format is versioned
- Major reliability improvements to the process manager
- Various bugfixes and stability improvements
## 0.1.2 (2013-04-03)
- Set container hostname with 'docker run -h'
- Selective attach at run with 'docker run -a [stdin[,stdout[,stderr]]]'
- Various bugfixes and stability improvements
- UI polish
- Progress bar on push/pull
- Use XZ compression by default
- Make IP allocator lazy
## 0.1.1 (2013-03-31)
- Display shorthand IDs for convenience
- Stabilize process management
- Layers can include a commit message
- Simplified 'docker attach'
- Fixed support for re-attaching
- Various bugfixes and stability improvements
- Auto-download at run
- Auto-login on push
- Beefed up documentation
## 0.1.0 (2013-03-23)
- First release
- Implement registry in order to push/pull images
- TCP port allocation
- Fix termcaps on Linux
- Add documentation
- Add Vagrant support with Vagrantfile
- Add unit tests
- Add repository/tags to ease image management
- Improve the layer implementation

View file

@ -18,7 +18,7 @@ import (
"unicode" "unicode"
) )
const VERSION = "0.1.7" const VERSION = "0.1.8"
var ( var (
GIT_COMMIT string GIT_COMMIT string
@ -836,6 +836,10 @@ func (srv *Server) CmdAttach(stdin io.ReadCloser, stdout rcli.DockerConn, args .
return fmt.Errorf("No such container: %s", name) return fmt.Errorf("No such container: %s", name)
} }
if container.State.Ghost {
return fmt.Errorf("Impossible to attach to a ghost container")
}
if container.Config.Tty { if container.Config.Tty {
stdout.SetOptionRawTerminal() stdout.SetOptionRawTerminal()
} }

View file

@ -530,16 +530,42 @@ func (container *Container) releaseNetwork() {
container.NetworkSettings = &NetworkSettings{} container.NetworkSettings = &NetworkSettings{}
} }
// FIXME: replace this with a control socket within docker-init
func (container *Container) waitLxc() error {
for {
if output, err := exec.Command("lxc-info", "-n", container.Id).CombinedOutput(); err != nil {
return err
} else {
if !strings.Contains(string(output), "RUNNING") {
return nil
}
}
time.Sleep(500 * time.Millisecond)
}
return nil
}
func (container *Container) monitor() { func (container *Container) monitor() {
// Wait for the program to exit // Wait for the program to exit
Debugf("Waiting for process") Debugf("Waiting for process")
// If the command does not exists, try to wait via lxc
if container.cmd == nil {
if err := container.waitLxc(); err != nil {
Debugf("%s: Process: %s", container.Id, err)
}
} else {
if err := container.cmd.Wait(); err != nil { if err := container.cmd.Wait(); err != nil {
// Discard the error as any signals or non 0 returns will generate an error // Discard the error as any signals or non 0 returns will generate an error
Debugf("%s: Process: %s", container.Id, err) Debugf("%s: Process: %s", container.Id, err)
} }
}
Debugf("Process finished") Debugf("Process finished")
exitCode := container.cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus() var exitCode int = -1
if container.cmd != nil {
exitCode = container.cmd.ProcessState.Sys().(syscall.WaitStatus).ExitStatus()
}
// Cleanup // Cleanup
container.releaseNetwork() container.releaseNetwork()
@ -588,7 +614,7 @@ func (container *Container) monitor() {
} }
func (container *Container) kill() error { func (container *Container) kill() error {
if !container.State.Running || container.cmd == nil { if !container.State.Running {
return nil return nil
} }
@ -600,6 +626,9 @@ func (container *Container) kill() error {
// 2. Wait for the process to die, in last resort, try to kill the process directly // 2. Wait for the process to die, in last resort, try to kill the process directly
if err := container.WaitTimeout(10 * time.Second); err != nil { if err := container.WaitTimeout(10 * time.Second); err != nil {
if container.cmd == nil {
return fmt.Errorf("lxc-kill failed, impossible to kill the container %s", container.Id)
}
log.Printf("Container %s failed to exit within 10 seconds of lxc SIGKILL - trying direct SIGKILL", container.Id) log.Printf("Container %s failed to exit within 10 seconds of lxc SIGKILL - trying direct SIGKILL", container.Id)
if err := container.cmd.Process.Kill(); err != nil { if err := container.cmd.Process.Kill(); err != nil {
return err return err
@ -617,9 +646,6 @@ func (container *Container) Kill() error {
if !container.State.Running { if !container.State.Running {
return nil return nil
} }
if container.State.Ghost {
return fmt.Errorf("Can't kill ghost container")
}
return container.kill() return container.kill()
} }
@ -629,9 +655,6 @@ func (container *Container) Stop(seconds int) error {
if !container.State.Running { if !container.State.Running {
return nil return nil
} }
if container.State.Ghost {
return fmt.Errorf("Can't stop ghost container")
}
// 1. Send a SIGTERM // 1. Send a SIGTERM
if output, err := exec.Command("lxc-kill", "-n", container.Id, "15").CombinedOutput(); err != nil { if output, err := exec.Command("lxc-kill", "-n", container.Id, "15").CombinedOutput(); err != nil {

View file

@ -10,7 +10,7 @@ Building blocks
Images Images
------ ------
An original container image. These are stored on disk and are comparable with what you normally expect from a stoppped virtual machine image. Images are stored (and retrieved from) repository An original container image. These are stored on disk and are comparable with what you normally expect from a stopped virtual machine image. Images are stored (and retrieved from) repository
Images are stored on your local file system under /var/lib/docker/images Images are stored on your local file system under /var/lib/docker/images

View file

@ -49,7 +49,7 @@ Save the changed we just made in the container to a new image called "_/builds/g
WEB_WORKER=$(docker run -d -p 5000 $BUILD_IMG /usr/local/bin/runapp) WEB_WORKER=$(docker run -d -p 5000 $BUILD_IMG /usr/local/bin/runapp)
- **"docker run -d "** run a command in a new container. We pass "-d" so it runs as a daemon. - **"docker run -d "** run a command in a new container. We pass "-d" so it runs as a daemon.
**"-p 5000"* the web app is going to listen on this port, so it must be mapped from the container to the host system. - **"-p 5000"** the web app is going to listen on this port, so it must be mapped from the container to the host system.
- **"$BUILD_IMG"** is the image we want to run the command inside of. - **"$BUILD_IMG"** is the image we want to run the command inside of.
- **/usr/local/bin/runapp** is the command which starts the web app. - **/usr/local/bin/runapp** is the command which starts the web app.

View file

@ -71,40 +71,38 @@
<h2> <h2>
<a name="installing-on-ubuntu-1204-and-1210" class="anchor" href="#installing-on-ubuntu-1204-and-1210"><span class="mini-icon mini-icon-link"></span> <a name="installing-on-ubuntu-1204-and-1210" class="anchor" href="#installing-on-ubuntu-1204-and-1210"><span class="mini-icon mini-icon-link"></span>
</a>Installing on Ubuntu</h2> </a>Installing on Ubuntu</h2>
<strong>Requirements</strong>
<p><strong>Requirements</strong></p>
<ul> <ul>
<li>Ubuntu 12.04 (LTS) or Ubuntu 12.10</li> <li>Ubuntu 12.04 (LTS) (64-bit)</li>
<li><strong>64-bit Operating system</strong></li> <li> or Ubuntu 12.10 (quantal) (64-bit)</li>
</ul> </ul>
<ol> <ol>
<li> <li>
<p>Add the Ubuntu PPA (Personal Package Archive) sources to your apt sources list. Copy and <p><strong>Install dependencies</strong></p>
paste the following lines at once.</p> The linux-image-extra package is only needed on standard Ubuntu EC2 AMIs in order to install the aufs kernel module.
<pre>sudo apt-get install linux-image-extra-`uname -r`</pre>
</li>
<li>
<p><strong>Install Docker</strong></p>
<p>Add the Ubuntu PPA (Personal Package Archive) sources to your apt sources list, update and install.</p>
<p>You may see some warnings that the GPG keys cannot be verified.</p>
<div class="highlight"> <div class="highlight">
<pre>sudo sh -c "echo 'deb http://ppa.launchpad.net/dotcloud/lxc-docker/ubuntu precise main' >> /etc/apt/sources.list"</pre> <pre>sudo sh -c "echo 'deb http://ppa.launchpad.net/dotcloud/lxc-docker/ubuntu precise main' >> /etc/apt/sources.list"</pre>
</li>
<li>
<p>Update your sources. You will see a warning that GPG signatures cannot be verified.</p>
<div class="highlight">
<pre>sudo apt-get update</pre> <pre>sudo apt-get update</pre>
</div>
</li>
<li>
<p>Now install it, you will see another warning that the package cannot be authenticated. Confirm install.</p>
<div class="highlight">
<pre>sudo apt-get install lxc-docker</pre> <pre>sudo apt-get install lxc-docker</pre>
</div> </div>
</li> </li>
<li> <li>
<p><strong>Run!</strong></p> <p><strong>Run!</strong></p>
<div class="highlight"> <div class="highlight">
<pre>docker</pre> <pre>docker run -i -t ubuntu /bin/bash</pre>
</div> </div>
</li> </li>
Continue with the <a href="http://docs.docker.io/en/latest/examples/hello_world/">Hello world</a> example. Continue with the <a href="http://docs.docker.io/en/latest/examples/hello_world/">Hello world</a> example.

View file

@ -44,6 +44,7 @@ new kernel will be compiled and this can take quite a while.
yaourt -S lxc-docker-git yaourt -S lxc-docker-git
Starting Docker Starting Docker
--------------- ---------------
@ -56,10 +57,7 @@ There is a systemd service unit created for docker. To start the docker service
sudo systemctl start docker sudo systemctl start docker
<<<<<<< HEAD
=======
>>>>>>> dotcloud/master
To start on system boot: To start on system boot:
:: ::

View file

@ -1,56 +1,53 @@
.. _ubuntu_linux: .. _binaries:
Ubuntu Linux Binaries
============ ========
**Please note this project is currently under heavy development. It should not be used in production.** **Please note this project is currently under heavy development. It should not be used in production.**
Installing on Ubuntu 12.04 and 12.10
Right now, the officially supported distributions are: Right now, the officially supported distributions are:
Ubuntu 12.04 (precise LTS) - Ubuntu 12.04 (precise LTS) (64-bit)
Ubuntu 12.10 (quantal) - Ubuntu 12.10 (quantal) (64-bit)
Docker probably works on other distributions featuring a recent kernel, the AUFS patch, and up-to-date lxc. However this has not been tested.
Install dependencies: Install dependencies:
--------------------- ---------------------
:: ::
sudo apt-get install lxc wget bsdtar curl sudo apt-get install lxc bsdtar
sudo apt-get install linux-image-extra-`uname -r` sudo apt-get install linux-image-extra-`uname -r`
The linux-image-extra package is needed on standard Ubuntu EC2 AMIs in order to install the aufs kernel module. The linux-image-extra package is needed on standard Ubuntu EC2 AMIs in order to install the aufs kernel module.
Install the latest docker binary: Install the docker binary:
:: ::
wget http://get.docker.io/builds/$(uname -s)/$(uname -m)/docker-master.tgz wget http://get.docker.io/builds/Linux/x86_64/docker-master.tgz
tar -xf docker-master.tgz tar -xf docker-master.tgz
sudo cp ./docker-master /usr/local/bin
Note: docker currently only supports 64-bit Linux hosts.
Run the docker daemon
---------------------
::
sudo docker -d &
Run your first container! Run your first container!
-------------------------
:: ::
cd docker-master docker run -i -t ubuntu /bin/bash
::
sudo ./docker run -i -t base /bin/bash
To run docker as a daemon, in the background, and allow non-root users to run ``docker`` start
docker -d
::
sudo ./docker -d &
Consider adding docker to your PATH for simplicity.
Continue with the :ref:`hello_world` example. Continue with the :ref:`hello_world` example.

View file

@ -13,6 +13,7 @@ Contents:
:maxdepth: 1 :maxdepth: 1
ubuntulinux ubuntulinux
binaries
archlinux archlinux
vagrant vagrant
windows windows

View file

@ -1,66 +0,0 @@
Mac OS X and other linux
========================
Please note this is a community contributed installation path. The only 'official' installation is using the :ref:`ubuntu_linux` installation path. This version
may be out of date because it depends on some binaries to be updated and published
Requirements
------------
We currently rely on some Ubuntu-linux specific packages, this will change in the future, but for now we provide a
streamlined path to install Virtualbox with a Ubuntu 12.10 image using Vagrant.
1. Install virtualbox from https://www.virtualbox.org/ (or use your package manager)
2. Install vagrant from http://www.vagrantup.com/ (or use your package manager)
3. Install git if you had not installed it before, check if it is installed by running
``git`` in a terminal window
We recommend having at least about 2Gb of free disk space and 2Gb RAM (or more).
Installation
------------
1. Fetch the docker sources
.. code-block:: bash
git clone https://github.com/dotcloud/docker.git
2. Run vagrant from the sources directory
.. code-block:: bash
vagrant up
Vagrant will:
* Download the Quantal64 base ubuntu virtual machine image from get.docker.io/
* Boot this image in virtualbox
Then it will use Puppet to perform an initial setup in this machine:
* Download & untar the most recent docker binary tarball to vagrant homedir.
* Debootstrap to /var/lib/docker/images/ubuntu.
* Install & run dockerd as service.
* Put docker in /usr/local/bin.
* Put latest Go toolchain in /usr/local/go.
You now have a Ubuntu Virtual Machine running with docker pre-installed.
To access the VM and use Docker, Run ``vagrant ssh`` from the same directory as where you ran
``vagrant up``. Vagrant will make sure to connect you to the correct VM.
.. code-block:: bash
vagrant ssh
Now you are in the VM, run docker
.. code-block:: bash
docker
Continue with the :ref:`hello_world` example.

View file

@ -6,17 +6,31 @@ Ubuntu Linux
**Please note this project is currently under heavy development. It should not be used in production.** **Please note this project is currently under heavy development. It should not be used in production.**
Docker is now available as a Ubuntu PPA (Personal Package Archive), Right now, the officially supported distributions are:
- Ubuntu 12.04 (precise LTS) (64-bit)
- Ubuntu 12.10 (quantal) (64-bit)
Dependencies
------------
The linux-image-extra package is only needed on standard Ubuntu EC2 AMIs in order to install the aufs kernel module.
.. code-block:: bash
sudo apt-get install linux-image-extra-`uname -r`
Installation
------------
Docker is available as a Ubuntu PPA (Personal Package Archive),
`hosted on launchpad <https://launchpad.net/~dotcloud/+archive/lxc-docker>`_ `hosted on launchpad <https://launchpad.net/~dotcloud/+archive/lxc-docker>`_
which makes installing Docker on Ubuntu very easy. which makes installing Docker on Ubuntu very easy.
**The Requirements**
* Ubuntu 12.04 (LTS) or Ubuntu 12.10
* **64-bit Operating system**
Add the custom package sources to your apt sources list. Copy and paste both the following lines at once. Add the custom package sources to your apt sources list. Copy and paste the following lines at once.
.. code-block:: bash .. code-block:: bash

View file

@ -1,8 +1,8 @@
.. _install_using_vagrant: .. _install_using_vagrant:
Install using Vagrant Using Vagrant
===================== =============
Please note this is a community contributed installation path. The only 'official' installation is using the Please note this is a community contributed installation path. The only 'official' installation is using the
:ref:`ubuntu_linux` installation path. This version may sometimes be out of date. :ref:`ubuntu_linux` installation path. This version may sometimes be out of date.
@ -27,25 +27,28 @@ Spin it up
1. Fetch the docker sources (this includes the Vagrantfile for machine setup). 1. Fetch the docker sources (this includes the Vagrantfile for machine setup).
.. code-block:: bash .. code-block:: bash
git clone https://github.com/dotcloud/docker.git git clone https://github.com/dotcloud/docker.git
2. Run vagrant from the sources directory 2. Run vagrant from the sources directory
.. code-block:: bash .. code-block:: bash
vagrant up vagrant up
Vagrant will: Vagrant will:
* Download the 'official' Precise64 base ubuntu virtual machine image from vagrantup.com * Download the 'official' Precise64 base ubuntu virtual machine image from vagrantup.com
* Boot this image in virtualbox * Boot this image in virtualbox
* Add the `Docker PPA sources <https://launchpad.net/~dotcloud/+archive/lxc-docker>`_ to /etc/apt/sources.lst * Add the `Docker PPA sources <https://launchpad.net/~dotcloud/+archive/lxc-docker>`_ to /etc/apt/sources.lst
* Update your sources * Update your sources
* Install lxc-docker * Install lxc-docker
You now have a Ubuntu Virtual Machine running with docker pre-installed. You now have a Ubuntu Virtual Machine running with docker pre-installed.
Connect
-------
To access the VM and use Docker, Run ``vagrant ssh`` from the same directory as where you ran To access the VM and use Docker, Run ``vagrant ssh`` from the same directory as where you ran
``vagrant up``. Vagrant will connect you to the correct VM. ``vagrant up``. Vagrant will connect you to the correct VM.
@ -54,10 +57,14 @@ To access the VM and use Docker, Run ``vagrant ssh`` from the same directory as
vagrant ssh vagrant ssh
Run
-----
Now you are in the VM, run docker Now you are in the VM, run docker
.. code-block:: bash .. code-block:: bash
docker docker
Continue with the :ref:`hello_world` example. Continue with the :ref:`hello_world` example.

View file

@ -0,0 +1,11 @@
# This will build a container capable of producing an official binary build of docker and
# uploading it to S3
from ubuntu:12.10
run apt-get update
run RUNLEVEL=1 DEBIAN_FRONTEND=noninteractive apt-get install -y -q s3cmd
run RUNLEVEL=1 DEBIAN_FRONTEND=noninteractive apt-get install -y -q golang
run RUNLEVEL=1 DEBIAN_FRONTEND=noninteractive apt-get install -y -q git
run RUNLEVEL=1 DEBIAN_FRONTEND=noninteractive apt-get install -y -q build-essential
copy dockerbuilder /usr/local/bin/dockerbuilder
copy s3cfg /.s3cfg
# run $img dockerbuilder $REVISION_OR_TAG $S3_ID $S3_KEY

View file

@ -0,0 +1,29 @@
#!/bin/sh
set -x
set -e
PACKAGE=github.com/dotcloud/docker
if [ $# -lt 3 ]; then
echo "Usage: $0 REVISION AWS_ID AWS_KEY"
exit 1
fi
export REVISION=$1 AWS_ID=$2 AWS_KEY=$3
export PATH=/usr/local/bin:$PATH
mkdir -p /go/src/$PACKAGE
git clone "https://$PACKAGE" /go/src/$PACKAGE
cd /go/src/$PACKAGE
git checkout $REVISION
# FIXME: checkout to specific revision
BUILDDIR=/tmp/docker-$REVISION
mkdir -p $BUILDDIR
(cd docker && go get && go build -o $BUILDDIR/docker)
tar -f /tmp/docker.tgz -C $(dirname $BUILDDIR) -zc $(basename $BUILDDIR)
s3cmd -P put /tmp/docker.tgz s3://get.docker.io/builds/$(uname -s)/$(uname -m)/docker-$REVISION.tgz

3
hack/dockerbuilder/s3cfg Normal file
View file

@ -0,0 +1,3 @@
[default]
access_key = $AWS_ID
secret_key = $AWS_KEY

View file

@ -184,12 +184,6 @@ func (runtime *Runtime) Register(container *Container) error {
} }
} }
// If the container is not running or just has been flagged not running
// then close the wait lock chan (will be reset upon start)
if !container.State.Running {
close(container.waitLock)
}
// Even if not running, we init the lock (prevents races in start/stop/kill) // Even if not running, we init the lock (prevents races in start/stop/kill)
container.State.initLock() container.State.initLock()
@ -207,6 +201,15 @@ func (runtime *Runtime) Register(container *Container) error {
// done // done
runtime.containers.PushBack(container) runtime.containers.PushBack(container)
runtime.idIndex.Add(container.Id) runtime.idIndex.Add(container.Id)
// If the container is not running or just has been flagged not running
// then close the wait lock chan (will be reset upon start)
if !container.State.Running {
close(container.waitLock)
} else {
container.allocateNetwork()
go container.monitor()
}
return nil return nil
} }

View file

@ -273,7 +273,7 @@ func TestAllocatePortLocalhost(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
defer container.Kill() defer container.Kill()
time.Sleep(300 * time.Millisecond) // Wait for the container to run time.Sleep(600 * time.Millisecond) // Wait for the container to run
conn, err := net.Dial("tcp", conn, err := net.Dial("tcp",
fmt.Sprintf( fmt.Sprintf(
"localhost:%s", container.NetworkSettings.PortMapping["5555"], "localhost:%s", container.NetworkSettings.PortMapping["5555"],

View file

@ -442,7 +442,7 @@ func FindCgroupMountpoint(cgroupType string) (string, error) {
return "", err return "", err
} }
reg := regexp.MustCompile(`^cgroup on (.*) type cgroup \(.*` + cgroupType + `[,\)]`) reg := regexp.MustCompile(`^.* on (.*) type cgroup \(.*` + cgroupType + `[,\)]`)
for _, line := range strings.Split(string(output), "\n") { for _, line := range strings.Split(string(output), "\n") {
r := reg.FindStringSubmatch(line) r := reg.FindStringSubmatch(line)
if len(r) == 2 { if len(r) == 2 {