{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "M9K blog: заметки с тегом docker",
    "_rss_description": "Заметки обо всём: devops, lifestyle, культура.",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/blog.m9k.space\/tags\/docker\/",
    "feed_url": "https:\/\/blog.m9k.space\/tags\/docker\/json\/",
    "icon": "https:\/\/blog.m9k.space\/pictures\/userpic\/userpic@2x.jpg?1769095194",
    "authors": [
        {
            "name": "M",
            "url": "https:\/\/blog.m9k.space\/",
            "avatar": "https:\/\/blog.m9k.space\/pictures\/userpic\/userpic@2x.jpg?1769095194"
        }
    ],
    "items": [
        {
            "id": "239",
            "url": "https:\/\/blog.m9k.space\/all\/proxmox-7-vklyuchenie-docker-i-podman-v-lxc\/",
            "title": "Proxmox 7: включение Docker и Podman в LXC",
            "content_html": "<p>Для запуска Docker или Podman внутри LXC-контейнера необходимо активировать дополнительные возможности: nesting, keyctl и fuse.<\/p>\n<p>Скрипт запрашивает ID контейнера, проверяет наличие конфигурации, создаёт резервную копию с меткой времени и включает необходимые параметры. Остальные настройки features сохраняются.<\/p>\n<p>Запускать от root на хосте Proxmox.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\n\nread -rp &quot;Введите ID контейнера (CTID): &quot; CTID\n\nif [[ ! &quot;$CTID&quot; =~ ^[0-9]+$ || ! -f &quot;\/etc\/pve\/lxc\/${CTID}.conf&quot; ]]; then\n    echo &quot;Ошибка: некорректный CTID или конфигурация не найдена&quot;\n    exit 1\nfi\n\nCONF=&quot;\/etc\/pve\/lxc\/${CTID}.conf&quot;\nBACKUP_DIR=&quot;\/root\/lxc-config-backups&quot;\n\nmkdir -p &quot;$BACKUP_DIR&quot; &amp;&amp;\ncp &quot;$CONF&quot; &quot;$BACKUP_DIR\/${CTID}.conf.$(date +%Y%m%d_%H%M%S).bak&quot; &amp;&amp;\npct set &quot;$CTID&quot; --features &quot;$(awk -F, &#039;\/^features:\/{sub(\/^features:[[:space:]]*\/, &quot;&quot;); for(i=1;i&lt;=NF;i++) if($i !~ \/^(nesting|keyctl|fuse)=\/) printf &quot;%s,&quot;, $i} END{print &quot;nesting=1,keyctl=1,fuse=1&quot;}&#039; &quot;$CONF&quot;)&quot; &amp;&amp;\npct config &quot;$CTID&quot; | grep &#039;^features:&#039;<\/code><\/pre><p>Пример выполнения:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Введите ID контейнера (CTID): 177\nfeatures: fuse=1,keyctl=1,nesting=1<\/code><\/pre><p>Резервная копия конфигурации сохраняется в \/root\/lxc-config-backups\/.<\/p>\n<p>После изменения параметров необходимо полностью остановить и запустить контейнер:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">pct stop 177 &amp;&amp; pct start 177<\/code><\/pre><p>Update:<br \/>\nЕщё одна ошибка:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Failed to open() \/dev\/net\/tun: No such file or directory\nFailed to set up tap device in namespace<\/code><\/pre><p>Чиним:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\nset -euo pipefail\n\nCTID=178\nCONF=&quot;\/etc\/pve\/lxc\/${CTID}.conf&quot;\nBACKUP=&quot;${CONF}.$(date +%Y%m%d%H%M%S).bkp&quot;\n\nmodprobe tun\ntest -c \/dev\/net\/tun\n\ncp -a &quot;$CONF&quot; &quot;$BACKUP&quot;\n\nRULES=(\n    &quot;lxc.cgroup2.devices.allow: c 10:200 rwm&quot;\n    &quot;lxc.mount.entry: \/dev\/net\/tun dev\/net\/tun none bind,create=file&quot;\n)\n\nfor rule in &quot;${RULES[@]}&quot;; do\n    grep -Fqx -- &quot;$rule&quot; &quot;$CONF&quot; || printf &#039;%s\\n&#039; &quot;$rule&quot; &gt;&gt; &quot;$CONF&quot;\ndone\n\necho &quot;Backup: $BACKUP&quot;\necho &quot;Configuration:&quot;\ngrep -E &#039;^lxc\\.(cgroup2\\.devices\\.allow|mount\\.entry):&#039; &quot;$CONF&quot;<\/code><\/pre>",
            "summary": "Для запуска Docker или Podman внутри LXC-контейнера необходимо активировать дополнительные возможности",
            "date_published": "2026-09-19T10:20:57+07:00",
            "date_modified": "2026-09-19T21:20:16+07:00",
            "tags": [
                "docker",
                "linux",
                "lxc",
                "podman",
                "системное администрирование"
            ],
            "_date_published_rfc2822": "Sat, 19 Sep 2026 10:20:57 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "239",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "220",
            "url": "https:\/\/blog.m9k.space\/all\/id-docker-konteynerov-maksimalnyh-potrebiteley-swap-v-linux\/",
            "title": "ID Docker контейнеров — максимальных потребителей SWAP в Linux",
            "content_html": "<pre class=\"e2-text-code\"><code class=\"\">for pid in $(ls \/proc | grep -E &#039;^[0-9]+$&#039;); do     swap=$(grep VmSwap \/proc\/$pid\/status 2&gt;\/dev\/null | awk &#039;{print $2}&#039;);          if [[ -n &quot;$swap&quot; &amp;&amp; &quot;$swap&quot; -gt 0 ]]; then         cmd=$(tr &#039;\\0&#039; &#039; &#039; &lt; \/proc\/$pid\/cmdline);          cgroup=$(cat \/proc\/$pid\/cgroup 2&gt;\/dev\/null);\n        container_id=$(echo &quot;$cgroup&quot; | grep -Eo &#039;[a-f0-9]{64}&#039; | head -n1);\n        if [[ -z &quot;$container_id&quot; ]]; then             container_id=$(echo &quot;$cgroup&quot; | grep -Eo &#039;docker-[a-f0-9]+&#039; | sed &#039;s\/docker-\/\/&#039; | head -n1);         fi;          echo -e &quot;$swap KB\\tPID: $pid\\tCID: ${container_id:-host}\\tCMD: $cmd&quot;;     fi; done | sort -nr | head<\/code><\/pre>",
            "summary": "",
            "date_published": "2026-04-27T09:48:52+07:00",
            "date_modified": "2026-04-27T09:48:51+07:00",
            "tags": [
                "docker",
                "linux",
                "swap",
                "системное администрирование"
            ],
            "_date_published_rfc2822": "Mon, 27 Apr 2026 09:48:52 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "220",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "201",
            "url": "https:\/\/blog.m9k.space\/all\/skreschivaem-uzha-i-ezha\/",
            "title": "CouchDB, Debian, AstraLinux, Docker и все-все-все",
            "content_html": "<p>Возникла необходимость запустить Couchdb в контейнере, где базовая ось (и базовые же пакеты) должны быть очень-очень свежими, в противной случай контейнер не проходит встроенную проверку на безопасность.<br \/>\nСтандартный официальный образ собран на базе Debian 12.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">FROM debian:bookworm-slim<\/code><\/pre><p>Простая замена базового образа на<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">FROM debian:trixie-slim<\/code><\/pre><p>приводит к тому, что контейнер не собирается по зависимостям.<br \/>\nСмотрим официальную репу в части зависимостей и видим прекрасное — libmozjs-78-0 (>= 78.15.0). Пробуем ставить свежую версию, которая есть в репах — не помогает, пакет couchdb принципиально требует libmozjs-78-0.<\/p>\n<p>Ок, скрещиваем ежа и ужа.<\/p>\n<p>У debian есть механизм apt-pinning. Это механизм, позволяющий задать приоритеты для версий пакетов из разных источников (репозиториев, release-веток, PPA), чтобы фиксировать версию, запрещать обновление или предпочитать конкретный источник.<\/p>\n<p>Коротко приоритеты делятся на:<\/p>\n<ul>\n<li>< 0 — никогда не устанавливать.<\/li>\n<li>1..99 — ставить только при явном указании версии.<\/li>\n<li>100 — приоритет уже установленной версии.<\/li>\n<li>500 — дефолт для неприоритетных источников.<\/li>\n<li>990 — приоритет для целевого релиза (-t), либо если явно указан release.<\/li>\n<li>>1000 — разрешает понижение версии (downgrade) к закреплённой.<\/li>\n<\/ul>\n<p>Добавляет в наш Dockerfile:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">RUN echo &quot;deb http:\/\/deb.debian.org\/debian bookworm main&quot; &gt; \/etc\/apt\/sources.list.d\/bookworm.list &amp;&amp; \\\n    echo &quot;Package: *\\nPin: release n=bookworm\\nPin-Priority: 500&quot; &gt; \/etc\/apt\/preferences.d\/bookworm &amp;&amp; \\\n    echo &quot;Package: *\\nPin: release n=trixie\\nPin-Priority: 600&quot; &gt; \/etc\/apt\/preferences.d\/trixie &amp;&amp; \\\n    echo &quot;deb [signed-by=\/usr\/share\/keyrings\/couchdb-archive-keyring.gpg] https:\/\/apache.jfrog.io\/artifactory\/couchdb-deb\/ bookworm main&quot; \\\n            &gt; \/etc\/apt\/sources.list.d\/couchdb.list &amp;&amp; \\\n    apt-get update<\/code><\/pre><p>Основная часть пакетов ставится из свежей репы, часть, которых в ней нет — из старых.<\/p>\n",
            "summary": "Возникла необходимость запустить Couchdb в контейнере, где базовая ось (и базовые же пакеты) должны быть очень-очень свежими, в противной случай контейнер не проходит встроенную проверку на безопасность",
            "date_published": "2025-08-14T17:40:09+07:00",
            "date_modified": "2025-08-14T17:40:08+07:00",
            "tags": [
                "apt-pinning",
                "astralinux",
                "couchdb",
                "debian",
                "docker",
                "linux",
                "системное администрирование"
            ],
            "_date_published_rfc2822": "Thu, 14 Aug 2025 17:40:09 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "201",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "197",
            "url": "https:\/\/blog.m9k.space\/all\/multistage-docker-kak-peresobirat-bez-kesha-ne-ves-dockefile\/",
            "title": "Multistage Docker — как пересобирать без кэша не весь Dockefile",
            "content_html": "<p>Возникла необходимость пересобрать отдельный stage-контейнер из Dockerfile. Первый собранный контейнер — это контейнер сборки OpenSSL, который выполняется очень, очень долго. Для того, чтоб сэкономить время, во вторую часть добавляем:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\"># Stage 1: OpenSSL-сборка (пусть останется закешированной)\nFROM debian:bookworm AS openssl-build\n# ... \n# Stage 2: основная\nFROM debian:bookworm-slim\n# Аргумент, чтобы инвалидировать кэш\nARG CACHE_BREAKER=default\n# Используем его в ENV, чтобы Docker счёл слой новым\nENV CACHE_BREAKER=${CACHE_BREAKER}<\/code><\/pre>",
            "summary": "Возникла необходимость пересобрать отдельный stage-контейнер из Dockerfile. Первый собранный контейнер — это контейнер сборки OpenSSL, который выполняется очень",
            "date_published": "2025-08-05T15:47:54+07:00",
            "date_modified": "2025-08-05T15:47:44+07:00",
            "tags": [
                "DevOps",
                "docker",
                "системное администрирование"
            ],
            "_date_published_rfc2822": "Tue, 05 Aug 2025 15:47:54 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "197",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "150",
            "url": "https:\/\/blog.m9k.space\/all\/old-apache-kafka-zookeeper-clickhouse-in-docker\/",
            "title": "Old Apache Kafka + ZooKeeper + Clickhouse in Docker",
            "content_html": "<p><i>docker-compose.yml<\/i><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">version: &#039;3.5&#039;\nservices:\n  kafka:\n    image: bitnami\/kafka:2.6.0\n    ports:\n      - &quot;9092:9092&quot;\n    environment:\n      - KAFKA_BROKER_ID=1\n      - KAFKA_LISTENERS=PLAINTEXT:\/\/:9092\n      - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:\/\/172.23.0.13:9092\n      - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181\n      - ALLOW_PLAINTEXT_LISTENER=yes\n    depends_on:\n      - zookeeper\n    networks:\n      clickhouse-network:\n        ipv4_address: 172.23.0.13\n  zookeeper:\n    image: zookeeper:3.5.8\n    container_name: zookeeper\n    hostname: zookeeper\n    ports:\n      - &quot;2181:2181&quot;\n    environment:\n      - ALLOW_ANONYMOUS_LOGIN=yes\n    networks:\n      clickhouse-network:\n        ipv4_address: 172.23.0.10\n  clickhouse01:\n    image: yandex\/clickhouse-server:20.8.12.2\n    container_name: clickhouse01\n    hostname: clickhouse01\n    networks:\n      clickhouse-network:\n        ipv4_address: 172.23.0.11\n    ports:\n      - &quot;127.0.0.1:8123:8123&quot;\n      - &quot;127.0.0.1:9000:9000&quot;\n    volumes:\n      - ${PWD}\/clickhouse01:\/etc\/clickhouse-server\n      - \/mnt\/volume\/clickhouse01\/data:\/var\/lib\/clickhouse\/\n      - \/mnt\/volume\/clickhouse01\/logs:\/var\/log\/clickhouse-server\/\n    depends_on:\n      - zookeeper\n  clickhouse02:\n    image: yandex\/clickhouse-server:20.8.12.2\n    container_name: clickhouse02\n    hostname: clickhouse02\n    networks:\n      clickhouse-network:\n        ipv4_address: 172.23.0.12\n    volumes:\n      - ${PWD}\/clickhouse02:\/etc\/clickhouse-server\n      - \/mnt\/volume\/clickhouse02\/data:\/var\/lib\/clickhouse\/\n      - \/mnt\/volume\/clickhouse02\/logs:\/var\/log\/clickhouse-server\/\n    depends_on:\n      - zookeeper\n\nnetworks:\n  clickhouse-network:\n    name: clickhouse-network\n    ipam:\n      config:\n        - subnet: 172.23.0.0\/24<\/code><\/pre>",
            "summary": "docker-compose.yml",
            "date_published": "2023-11-02T14:52:07+07:00",
            "date_modified": "2023-12-12T11:55:10+07:00",
            "tags": [
                "apache kafka",
                "clickhouse",
                "DevOps",
                "docker",
                "zookeeper",
                "администрирование",
                "системное администрирование"
            ],
            "_date_published_rfc2822": "Thu, 02 Nov 2023 14:52:07 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "150",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "147",
            "url": "https:\/\/blog.m9k.space\/all\/gitlab-runner-with-ansible-kerberos\/",
            "title": "GitLab Runner with Ansible & Kerberos",
            "content_html": "<pre class=\"e2-text-code\"><code class=\"\">FROM alpine:3.16\n\nRUN apk update &amp;&amp; \\\napk add --no-cache git gitlab-runner ansible gawk krb5 dumb-init &amp;&amp; \\\napk add --upgrade openssh-client-krb5 &amp;&amp; \\\nrm -rf \/tmp\/* &amp;&amp; \\\nrm -rf \/var\/cache\/apk\/*\n\nRUN sed -i -e &quot;s#\\(^gitlab-runner:x\\):[^:]\\+:\\(.*\\)#\\1:1010:\\2#&quot; \/etc\/group\nRUN sed -i -e &quot;s#\\(^gitlab-runner:x\\):[^:]\\+:[^:]\\+:\\(.*\\)#\\1:1010:1010:\\2#&quot; \/etc\/passwd\nRUN chown -R 1010:1010 \/var\/lib\/gitlab-runner\n\nCOPY krb5.conf \/etc\/krb5.conf\nCOPY .gitconfig \/var\/lib\/gitlab-runner\/\nCOPY entrypoint \/\n\nSTOPSIGNAL SIGQUIT\nENTRYPOINT [&quot;\/usr\/bin\/dumb-init&quot;, &quot;\/entrypoint&quot;]\nCMD [&quot;run&quot;, &quot;--user=gitlab-runner&quot;, &quot;--working-directory=\/var\/lib\/gitlab-runner&quot;]<\/code><\/pre>",
            "summary": "",
            "date_published": "2023-10-20T17:08:08+07:00",
            "date_modified": "2023-10-20T17:07:57+07:00",
            "tags": [
                "ansible",
                "docker",
                "kerberos",
                "администрирование"
            ],
            "_date_published_rfc2822": "Fri, 20 Oct 2023 17:08:08 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "147",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "124",
            "url": "https:\/\/blog.m9k.space\/all\/dive\/",
            "title": "Dive",
            "content_html": "<p>Наткнулся на толковую утилиту для просмотр файловой системы контейнера без запуска — и вложенных слоёв.<br \/>\n<a href=\"https:\/\/github.com\/wagoodman\/dive\">Ссылка на гитхаб<\/a><\/p>\n",
            "summary": "Наткнулся на толковую утилиту для просмотр файловой системы контейнера без запуска — и вложенных слоёв",
            "date_published": "2023-01-30T17:11:22+07:00",
            "date_modified": "2023-01-30T17:11:20+07:00",
            "tags": [
                "docker",
                "администрирование"
            ],
            "_date_published_rfc2822": "Mon, 30 Jan 2023 17:11:22 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "124",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "123",
            "url": "https:\/\/blog.m9k.space\/all\/docker-proxy\/",
            "title": "Docker Proxy",
            "content_html": "<pre class=\"e2-text-code\"><code class=\"\">cd \/etc\/systemd\/system\/docker.service.d\ntouch http-proxy.conf<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">[Service]\nEnvironment=&quot;HTTP_PROXY=http:\/\/proxy:3128&quot;\nEnvironment=&quot;HTTPS_PROXY=http:\/\/proxy:3128&quot;\nEnvironment=&quot;NO_PROXY=localhost,127.0.0.1,::1,proxy&quot;<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">systemctl daemon-reload\nservice docker restart\nsystemctl show --property=Environment docker<\/code><\/pre>",
            "summary": "",
            "date_published": "2023-01-24T14:26:41+07:00",
            "date_modified": "2023-01-30T17:11:38+07:00",
            "tags": [
                "docker",
                "proxy",
                "администрирование"
            ],
            "_date_published_rfc2822": "Tue, 24 Jan 2023 14:26:41 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "123",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "108",
            "url": "https:\/\/blog.m9k.space\/all\/docker-service-logs\/",
            "title": "Docker Service logs",
            "content_html": "<p>Директории логов сервиса докер для разных ОС:<\/p>\n<ul>\n<li>Ubuntu (old using upstart ) — \/var\/log\/upstart\/docker.log,<\/li>\n<li>Ubuntu (new using systemd ) — sudo journalctl -fu docker.service,<\/li>\n<li>Amazon Linux AMI — \/var\/log\/docker,<\/li>\n<li>Boot2Docker — \/var\/log\/docker.log,<\/li>\n<li>Debian GNU\/Linux — \/var\/log\/daemon.log,<\/li>\n<li>CentOS — cat \/var\/log\/message | grep docker,<\/li>\n<li>CoreOS — journalctl -u docker.service,<\/li>\n<li>Fedora — journalctl -u docker.service,<\/li>\n<li>Red Hat Enterprise Linux Server — \/var\/log\/messages | grep docker,<\/li>\n<li>OpenSuSE — journalctl -u docker.service,<\/li>\n<li>macOS — ~\/Library\/Containers\/com.docker.docker\/Data\/log\/vm\/d‌​ocker.log,<\/li>\n<li>Windows — Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time.<\/li>\n<\/ul>\n",
            "summary": "Директории логов сервиса докер для разных ОС",
            "date_published": "2022-11-24T09:49:18+07:00",
            "date_modified": "2022-11-24T09:49:01+07:00",
            "tags": [
                "docker",
                "linux",
                "логи"
            ],
            "_date_published_rfc2822": "Thu, 24 Nov 2022 09:49:18 +0700",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "108",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4199,
    "_e2_ua_string": "Aegea 11.5 (v4199)"
}