繁体   English   中英

在 ubuntu live disk 中运行 docker

[英]Run docker in ubuntu live disk

我想知道是否可以在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 介绍给我的父母,但他们不想在他们的电脑上安装 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,但如果是这样,那么是否可以更新 livedisk 中的内核(保留它?)?

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

如果您的系统不使用 Systemd

您只需要更改/etc/default/docker即可在其中包含此内容:

DOCKER_OPTS="--storage-driver=devicemapper"

如果您的系统使用 Systemd

请参阅此答案并在--storage-driver=devicemapper start 命令的末尾添加--storage-driver=devicemapper

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

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

我还尝试使用 AUFS 在 grub 中使用union=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 使这项工作成功,在我看来,这将是一个更好的答案。

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

默认情况下,docker 守护进程将这些数据放入/var/lib/docker 您可以使用--graph daemon 选项更改该位置

我在 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对我来说不能正常工作。)

更简单的现代方法

以下在 Ubuntu 14.04 中不起作用,但在20.0418.0416.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.

我有类似的问题,但使用 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) 在 ubuntu live 上安装 docker 后。 您需要停止使用 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 对我来说总是很痛苦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM