LINUX.ORG.RU
решено ФорумAdmin

Как запустить docker в lxc-контейнере?

 , , , ,


0

1

Всем привет. В общем такой странный вопрос. Есть у меня сервер с Гентой, на ней стоит куча разных lxc-контейнеров, в одном из которых стоит graphite и grafana. Всё работало, но чёрт меня дёрнул обновить графит, и, как полагается, всё сломалось-отвалилось. Разбираться-даунгрейдить что-то не хочется, посмотрел на офф-сайт графита, а у них там есть докер-контейнер, который маппит порты графита и statsd на локалхост, что мне в общем-то и нужно! При том что на этот контейнер и так сыпалось куча метрик и к нему было подключено пара vpn, то шаманить что-то с самим контейнером мне не хотелось. А так - хороший вариант, графит работает, на тех же портах, ничего не переделывается, только докер, и graphite source в Графане переделать. Но не тут-то было. Устанавливаю значит docker, демон запускаю, пытаюсь запустить docker-контейнер, а мне в ответ

tarting container process caused \"process_linux.go:261: applying cgroup configuration for process caused \\\"open /sys/fs/cgroup/openrc/lxc/metrics-3/docker/cpuset.cpus: no such file or directory\\\"\"\n"

Погуглил, в основном все решали модификацией конфига самого контейнера, поменял конфиг:

# Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template:
# For additional config options, please look at lxc.container.conf(5)
lxc.mount.auto = cgroup
lxc.aa_profile = unconfined
lxc.cgroup.devices.allow = a
lxc.cap.drop =

lxc.network.type = empty
lxc.rootfs = /var/lib/lxc/metrics/rootfs

# Common configuration
lxc.include = /usr/share/lxc/config/debian.common.conf

# Container specific configuration
lxc.utsname = metrics
lxc.arch = amd64

###
lxc.network.type = veth
lxc.network.flags = up
lxc.network.veth.pair = metrics
lxc.network.name = eth0
lxc.network.link = br0

#enable tun
#lxc.cgroup.devices.deny = a
#lxc.cgroup.devices.allow = c 10:200 rwm
#lxc.hook.autodev = sh -c "modprobe tun; cd ${LXC_ROOTFS_MOUNT}/dev; mkdir net; mknod net/tun c 10 200; chmod 0666 net/tun"

(Первые 4 строчки)

mount в контейнере lxc

root@metrics:/# mount                                                                                                                                                                                                                       /dev/md3 on / type ext4 (rw,relatime,data=ordered)
none on /dev type tmpfs (rw,relatime,size=492k,mode=755)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
proc on /proc/sys/net type proc (rw,nosuid,nodev,noexec,relatime)
proc on /proc/sys type proc (ro,nosuid,nodev,noexec,relatime)
proc on /proc/sysrq-trigger type proc (ro,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (ro,nosuid,nodev,noexec,relatime)
sysfs on /sys/devices/virtual/net type sysfs (rw,relatime)
sysfs on /sys/devices/virtual/net type sysfs (rw,nosuid,nodev,noexec,relatime)
fusectl on /sys/fs/fuse/connections type fusectl (rw,nosuid,nodev,noexec,relatime)
cgroup_root on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,size=10240k,mode=755)
cgroup_root on /sys/fs/cgroup/openrc type tmpfs (ro,relatime,size=10240k,mode=755)
openrc on /sys/fs/cgroup/openrc/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,release_agent=/lib64/rc/sh/cgroup-release-agent.sh,name=openrc)
cgroup_root on /sys/fs/cgroup/cpuset type tmpfs (ro,relatime,size=10240k,mode=755)
cpuset on /sys/fs/cgroup/cpuset/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset,clone_children)
cgroup_root on /sys/fs/cgroup/cpu type tmpfs (ro,relatime,size=10240k,mode=755)
cpu on /sys/fs/cgroup/cpu/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,cpu)
cgroup_root on /sys/fs/cgroup/cpuacct type tmpfs (ro,relatime,size=10240k,mode=755)
cpuacct on /sys/fs/cgroup/cpuacct/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,cpuacct)
cgroup_root on /sys/fs/cgroup/blkio type tmpfs (ro,relatime,size=10240k,mode=755)
blkio on /sys/fs/cgroup/blkio/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)
cgroup_root on /sys/fs/cgroup/memory type tmpfs (ro,relatime,size=10240k,mode=755)
memory on /sys/fs/cgroup/memory/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,memory)
cgroup_root on /sys/fs/cgroup/devices type tmpfs (ro,relatime,size=10240k,mode=755)
devices on /sys/fs/cgroup/devices/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,devices)
cgroup_root on /sys/fs/cgroup/freezer type tmpfs (ro,relatime,size=10240k,mode=755)
freezer on /sys/fs/cgroup/freezer/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)
cgroup_root on /sys/fs/cgroup/net_cls type tmpfs (ro,relatime,size=10240k,mode=755)
net_cls on /sys/fs/cgroup/net_cls/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup_root on /sys/fs/cgroup/perf_event type tmpfs (ro,relatime,size=10240k,mode=755)
perf_event on /sys/fs/cgroup/perf_event/lxc/metrics-3 type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)
devpts on /dev/console type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)
devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
devpts on /dev/tty1 type devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)                                                                                                                                                                   devpts on /dev/tty2 type devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
devpts on /dev/tty3 type devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
devpts on /dev/tty4 type devpts (rw,relatime,gid=5,mode=620,ptmxmode=666)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)                                                                                          hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)
mqueue on /dev/mqueue type mqueue (rw,relatime)
root@metrics:/# 

но и тут меня ждала неудача. Ничё не работает, ответ от docker start graphite тот же. Господа читатели, подскажете, куда копать? Спасибо заранее за помощь.

Прошу прощения, недоглядел.

Вот эта строчка

lxc.include = /usr/share/lxc/config/debian.common.conf

параметры lxc.cgroup в debian.common.conf перекрывали каким-то образом видимо параметры в глобальном конфиге для контейнера. Заккоментировал его нах, теперь всё ок. Закрываю тему.

mahalaka ★★
() автор топика

Используй LXD. У Grafana свой репозиторий, а вот graphite должен быть из стандартного репозитория, чтобы его можно было сломать при обновлении нужно иметь определенный талант.

anonymous_sama ★★★★★
()
Ответ на: комментарий от anonymous_sama

С Графаной у меня и нет проблем. Контейнер обновлял с jessie до stretch, и django поломался похоже, или для графита был слишком новый джанго, хз. Сейчас уже всё ок. :-)

root@metrics:/# docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS              PORTS                                                                                                                                    NAMES
888cacd94c62        graphiteapp/graphite-statsd   "/sbin/my_init"     About an hour ago   Up 5 minutes        0.0.0.0:80->80/tcp, 0.0.0.0:2003-2004->2003-2004/tcp, 0.0.0.0:2023-2024->2023-2024/tcp, 0.0.0.0:8126->8126/tcp, 0.0.0.0:8125->8125/udp   graphite
root@metrics:/# 

mahalaka ★★
() автор топика
Ответ на: комментарий от anonymous_sama

Вот что начал говорить graphite после апгрейда до stretch

root@metrics:/# python2 /usr/share/graphite-web/graphite.wsgi
Traceback (most recent call last):
  File "/usr/share/graphite-web/graphite.wsgi", line 5, in <module>
    django.setup()
  File "/usr/local/lib/python2.7/dist-packages/django/__init__.py", line 18, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/usr/local/lib/python2.7/dist-packages/django/apps/registry.py", line 115, in populate
    app_config.ready()
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/apps.py", line 22, in ready
    self.module.autodiscover()
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/admin/__init__.py", line 24, in autodiscover
    autodiscover_modules('admin', register_to=site)
  File "/usr/local/lib/python2.7/dist-packages/django/utils/module_loading.py", line 74, in autodiscover_modules
    import_module('%s.%s' % (app_config.name, module_to_search))
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/usr/lib/python2.7/dist-packages/tagging/admin.py", line 3, in <module>
    from tagging.forms import TagAdminForm
  File "/usr/lib/python2.7/dist-packages/tagging/forms.py", line 11, in <module>
    class TagAdminForm(forms.ModelForm):
  File "/usr/local/lib/python2.7/dist-packages/django/forms/models.py", line 274, in __new__
    "needs updating." % name
django.core.exceptions.ImproperlyConfigured: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form TagAdminForm needs updating.

И много чего ещё. Так что я не стал ковыряться в этом, просто пнуть docker проще, тем более мне не принципиально.

mahalaka ★★
() автор топика

Вот так:

<HOST> $ lxc launch ubuntu:16.04 dock
Создание dock
Starting dock
<HOST> $ lxc exec dock bash

<LXC> # sudo apt -y install docker-ce
<LXC> # exit

<HOST> $ lxc config set dock security.privileged true
<HOST> $ lxc config set dock security.nesting true
<HOST> $ lxc stop dock && lxc start dock
<HOST> $ lxc exec dock bash
<LXC> # docker run -d -p 80:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
94ed0c431eb5: Pull complete 
9406c100a1c3: Pull complete 
aa74daafd50c: Pull complete 
Digest: sha256:788fa27763db6d69ad3444e8ba72f947df9e7e163bad7c1f5614f8fd27a311c3
Status: Downloaded newer image for nginx:latest
c973e1372766a3598b62c7aee5293a77952addda045383618fcb0b0a7bb30507
exit

<HOST> $ lxc info  dock | grep eth0
  eth0:	inet	169.254.156.5	vethCQMV78

<HOST> $ curl http://169.254.156.5
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

<HOST> $ lxc delete -f dock
Difrex ★★★★
()
Ответ на: комментарий от Difrex

Ага, у меня просто common-конфиг Дебиана перекрывал конфиг самого контейнера.

mahalaka ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.