Skip to content

не работает клон #11

Closed

Description

@skulidropek
user@arch ~> pnpm run docker-git clone https://github.com/ProverCoderAI/eslint-plugin-suggest-members/issues/19 --force
 ERR_PNPM_NO_SCRIPT  Missing script: docker-git

Command "docker-git" not found.
user@arch ~ [1]> cd docker-git/
user@arch ~/docker-git (main)> pnpm run docker-git clone https://github.com/ProverCoderAI/eslint-plugin-suggest-members/issues/19 --force

> effect-template-workspace@1.0.0 docker-git /home/user/docker-git
> pnpm --filter @effect-template/app build:docker-git && node packages/app/dist/src/docker-git/main.js clone https://github.com/ProverCoderAI/eslint-plugin-suggest-members/issues/19 --force



> @effect-template/app@1.0.0 prebuild:docker-git /home/user/docker-git/packages/app
> pnpm -C ../lib build


> @effect-template/lib@1.0.0 build /home/user/docker-git/packages/lib
> tsc -p tsconfig.json


> @effect-template/app@1.0.0 build:docker-git /home/user/docker-git/packages/app
> tsc -p tsconfig.json

[13:00:06.239] WARN (#1): SSH port 2222 is already reserved by another docker-git project; using 2235 instead.
[13:00:06.256] INFO (#1): Building gh api image (docker-git-auth-gh:latest)...
ERROR: permission denied while trying to connect to the docker API at unix:///var/run/docker.sock
[13:00:06.313] WARN (#1): Auto-fork failed; continuing without fork. ()
[13:00:06.318] INFO (#1): Created docker-git project in /home/user/.docker-git/provercoderai/eslint-plugin-suggest-members
[13:00:06.319] INFO (#1):   - /home/user/.docker-git/provercoderai/eslint-plugin-suggest-members/Dockerfile
[13:00:06.319] INFO (#1):   - /home/user/.docker-git/provercoderai/eslint-plugin-suggest-members/entrypoint.sh
[13:00:06.319] INFO (#1):   - /home/user/.docker-git/provercoderai/eslint-plugin-suggest-members/docker-compose.yml
[13:00:06.319] INFO (#1):   - /home/user/.docker-git/provercoderai/eslint-plugin-suggest-members/.dockerignore
[13:00:06.319] INFO (#1):   - /home/user/.docker-git/provercoderai/eslint-plugin-suggest-members/docker-git.json
[13:00:06.319] INFO (#1):   - /home/user/.docker-git/provercoderai/eslint-plugin-suggest-members/.gitignore
[13:00:06.320] INFO (#1): Force enabled: wiping docker compose volumes (docker compose down -v)...
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.51/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.oneoff%3DFalse%22%3Atrue%2C%22com.docker.compose.project%3Deslint-plugin-suggest-members%22%3Atrue%7D%7D": dial unix /var/run/docker.sock: connect: permission denied
[13:00:06.357] ERROR (#1): docker compose failed with exit code 1
[13:00:06.359] ERROR (#1):
  DockerCommandError: An error has occurred
      at file:///home/user/docker-git/packages/lib/dist/shell/docker.js:24:123
      at ensureExitCode (file:///home/user/docker-git/packages/lib/dist/shell/command-runner.js:9:19)
      at file:///home/user/docker-git/packages/lib/dist/shell/command-runner.js:13:14
 ELIFECYCLE  Command failed with exit code 1.
user@arch ~/docker-git (main) [1]>

Activity

  1. skulidropek commented on Feb 11, 2026

    @skulidropek
    MemberAuthor

    Я думаю надо делать что бы был DinD

    Да, это **типичная ловушка**, и она почти всегда случается из-за смешивания двух разных моделей:
    
    1. **“Docker-outside-of-Docker”**: контейнер использует **демон Docker на хосте** через проброшенный сокет.
    2. **“Docker-in-Docker (DinD)”**: внутри контейнера поднимается **свой `dockerd`**.
    
    Когда внутри контейнера ты *поднимаешь `dockerd`* **и одновременно** (явно или неявно через compose/CI) используешь путь **`/var/run/docker.sock`**, очень легко **сломать хостовый сокет**: контейнерный `dockerd` может `unlink`/пересоздать сокет или поменять ему права/владельца. Поскольку это bind-mount, изменения уходят на хост — и снаружи ты “теряешь Docker”.
    
    ---
    
    ## Как решить (нужно выбрать один из двух правильных вариантов)
    
    ### Вариант A (рекомендую): контейнеры “управляют хостовым Docker” через сокет
    
    **Тогда внутри контейнера НЕ должно быть `dockerd`.** Только `docker` CLI.
    
    Запуск примера:
    
    ```bash
    DOCKER_GID=$(getent group docker | cut -d: -f3)
    
    docker run --rm -it \
      -v /var/run/docker.sock:/var/run/docker.sock \
      --group-add "$DOCKER_GID" \
      docker:cli docker ps
    

    Ключевые правила:

    • не запускай dockerd внутри такого контейнера;
    • не делай chmod/chown /var/run/docker.sock внутри контейнера;
    • добавь правильный GID группы docker (а не “название группы” внутри контейнера).

    Если у тебя rootless Docker на хосте, сокет другой:
    /run/user/$UID/docker.sock — и пробрасывать надо его, а не /var/run/docker.sock.


    Вариант B: полноценный DinD (изолированный Docker внутри контейнера)

    Тогда НЕ пробрасывай хостовый /var/run/docker.sock внутрь.
    Контейнерный dockerd должен создавать свой сокет сам (и хранить данные в своём /var/lib/docker).

    Пример отдельного демона DinD:

    docker run -d --name dind \
      --privileged \
      -e DOCKER_TLS_CERTDIR= \
      -p 2375:2375 \
      -v dind-data:/var/lib/docker \
      docker:dind

    И подключение к нему:

    docker -H tcp://127.0.0.1:2375 ps

    (Это без TLS — удобно, но небезопасно; для локальной разработки ок, для сети — лучше TLS.)


    Почему “внутри начал юзать — снаружи умерло” именно у тебя

    Самый вероятный сценарий: ты монтируешь хостовый сокет и внутри запускаешь dockerd (напрямую или через образ/entrypoint типа docker:dind). В этот момент контейнерный демон начинает “наводить порядок” в /var/run/docker.sock и ломает сокет на хосте.

    Быстрое восстановление снаружи (если уже сломано):

    sudo systemctl restart docker
    ls -l /var/run/docker.sock

    Практическая схема “много разных мест, много контейнеров”

    • Если “из разных мест” = разные проекты/контейнеры на одном хосте → обычно выбирают Вариант A (проброс сокета + правильные права).
    • Если “из разных мест” = нужна изоляция (разные демоны, разные кеши/образы/сети) → Вариант B (отдельный DinD демон/контейнер, подключение через DOCKER_HOST или docker context).

    Если хочешь, скинь как именно ты запускаешь тот контейнер, где “внутри начинают юзать докер” (docker run / docker-compose.yml). По одной команде/файлу я точно укажу, где именно у тебя смешались A и B и дам минимальный фикс.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions