在ubuntu live disk中运行docker

时间:2015-05-14 22:53:27

标签: linux ubuntu docker

我想知道是否可以在 Ubuntu 14.04 USB Live-Disk 中安装和运行Docker。

我正在尝试使用 8GB USB,4 GB用于安装, 4 GB用于持久存储,但我在运行容器时遇到错误(拉它们没问题)。

这是我的Docker版本:

$ sudo docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): 7c8fca2
OS/Arch (server): linux/amd64

运行docker容器时遇到的当前错误是:

[8] System error: mountpoint for cpu not found 

OBS:有时错误是 cpuset 或找不到设备

我正在使用的活盘的内核是:

$ uname -r
3.13.0-32-generic

如果Ubuntu实时磁盘不是运行Docker的最佳实时磁盘,那么是否有其他具有GUI功能的替代方案,而不仅仅是一个运行docker的简单终端?

我这样说是因为我想把Docker介绍给我的父母,但是他们不想在他们的PC上安装linux,所以我需要一些简单的图形界面来记下Dockerfile,打开一个浏览器等...

更新

我在安装过程中看到设置cgroup-lite依赖项initctl: Unknown job: cgroup-lite时出错。另外我读到一些ubuntu需要安装 apparmor ,以便docker安装正常工作。

所以我安装了它并重新安装了docker(安装后没有问题的cgroup-lite),现在我在运行sudo docker -d时得到了这个

INFO[0000] +job serveapi(unix:///var/run/docker.sock)   
INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) 
INFO[0000] +job init_networkdriver()                    
INFO[0000] -job init_networkdriver() = OK (0)           
WARN[0004] Your kernel does not support cgroup swap limit. 
INFO[0004] Loading containers: start.                   
......
INFO[0004] Loading containers: done.                    
INFO[0004] docker daemon: 1.6.2 7c8fca2; execdriver: native-0.2; graphdriver: aufs 
INFO[0004] +job acceptconnections()                     
INFO[0004] -job acceptconnections() = OK (0)            
INFO[0004] Daemon has completed initialization 

尝试运行容器时,我收到>

ERRO[0125] HTTP Error: statusCode=500 Cannot start container 90875e79dec37cec41a67aac235b81f0fc17c4e011cd6e5368a4b29336587f5b: 
[8] System error: permission denied

不确定内核不支持cgroup,但如果是这样,那么是否可以更新liveisk中的内核(持久化?)?

5 个答案:

答案 0 :(得分:12)

我设法通过将Docker存储更改为 devicemapper 而不是 AUFS 来完成此工作。

基本上只需要更改/etc/default/docker就可以了:

DOCKER_OPTS="--storage-driver=devicemapper"

我设法让容器运行正常,但我更喜欢使用AUFS。

我意识到默认情况下分区没有使用aufs,但是像cawcow(现在不记得了)。

我还尝试使用grub中的union=aufs标志使用AUFS,但是当运行docker守护程序时,我得到FATA[0000] Shutting down daemon due to errors: error intializing graphdriver: backing file system is unsupported for this graph driver,看起来与https://github.com/docker/docker/issues/7321

我会在这里留下我的答案,因为这是解决这个问题的方法,但是如果有人设法使用AUFS来完成这项工作,那么在我看来,这将是一个更好的答案。

答案 1 :(得分:5)

您想告诉Docker守护程序将与容器相关的数据存储在持久存储上。

默认情况下,docker守护程序会将这些数据放入/var/lib/docker。您可以使用--graph docker daemon option

更改该位置

答案 2 :(得分:2)

我在Debian Live系统上有类似的问题。对于最新的docker,更改/etc/default/docker不会进行任何更改。

--storage-driver=vfs附加到/lib/systemd/system/docker.service上对我有帮助:

...
ExecStart=/usr/bin/dockerd --storage-driver=vfs -H fd://
...

({vfs的性能可能很差,但是aufsoverlay2devicemapper不适用于我。)

答案 3 :(得分:2)

一种更简单的现代方法

以下内容在Ubuntu 14.04中不起作用,但在 20.04 18.04 16.04 中起作用。

先决条件:在LiveUSB上安装Docker

如果尚未安装Docker,请启动终端并粘贴以下命令。

# docker.io is in the "universe" repository, so add it.
sudo add-apt-repository universe

# Only necessary in 16.04, but doesn't hurt anything.
sudo apt-get update

# Install Ubuntu's Docker package
sudo apt-get install -y docker.io

解决方案:

在这里,我们使用/etc/docker/daemon.json配置文件来更改存储驱动程序。

在终端中粘贴以下命令:

# Create a config file to set the storage driver to "Device Mapper"
echo '{ "storage-driver": "devicemapper" }' | sudo tee -a /etc/docker/daemon.json > /dev/null

# Restart the Docker service
sudo service docker restart

测试

现在我可以使用命令成功运行Ubuntu容器

sudo docker run --rm -it ubuntu

未来的坏消息

不幸的是,我不确定这种方法将支持多长时间。运行sudo docker info时,我看到以下弃用警告:

WARNING: the devicemapper storage-driver is deprecated, and will be removed in a future
release.

答案 4 :(得分:0)

我有类似的问题,但是使用Ubuntu 16.04。我实际上是为了使其运行

1)我在ubuntu live上安装了docker

    sudo apt-get update

    sudo apt-get install \
      apt-transport-https \
      ca-certificates \
      curl \
      gnupg-agent \

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
      software-properties-common

    sudo apt-key fingerprint 0EBFCD88

    sudo add-apt-repository \
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
       $(lsb_release -cs) \
       stable"

    sudo apt-get update

    sudo apt-get install docker-ce docker-ce-cli containerd.io

2)将docker安装到ubuntu live之后。您需要使用

停止docker
    sudo service docker stop

3)然后使用

编辑/lib/systemd/system/docker.service上的文件
    sudo gedit /lib/systemd/system/docker.service

通过替换此行

    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd  /containerd.sock

与此行

    ExecStart=/usr/bin/dockerd -g /media/ubuntu/something -H fd:// --containerd=/run/containerd  /containerd.sock

因此,基本上我们要做的是添加-g / media / ubuntu / something,该驱动程序将替换docker的ROOT DIR。请注意,如果驱动程序是NTFS,则无法使用。您需要将驱动程序设为ext4或FAT。

4)完成后,重新加载守护程序

    sudo systemctl daemon-reload

5)重新启动docker服务

    sudo service docker restart

6)通过运行

检查ROOT DIR是否已更改
    sudo docker info

您应该在此处看到新目录。 毕竟,这非常酷,因为您可以拥有可移植的图像和容器,并且只需执行上述操作即可在任何ubuntu机器上运行它们。我没有在Windows上测试过它,但是无论如何,使用docker和Windows一直让我很痛苦。