Рейтинг:2

Запустите dockerd в качестве фона на WSL Ubuntu

флаг us

Я установил Docker в дистрибутив WSL Ubuntu 20.04. Для запуска мне нужно:

судо докерд

Он работает, но блокирует мою вкладку терминала. Для работы с контейнерами мне нужно открыть вторую вкладку. я пытался использовать судо докерд & - кажется, что dockerd работает в фоновом режиме, но когда я меняю каталог, он останавливается.

введите описание изображения здесь

Как я могу запустить dockerd в фоновом режиме и менять каталоги без остановки?

muru avatar
флаг us
Почему бы не использовать [рабочий стол Docker с серверной частью WSL](https://docs.docker.com/desktop/windows/wsl/)?
Roman Marusyk avatar
флаг us
@muru, потому что Docker для рабочего стола меняет свою лицензию и больше не будет бесплатным. Я пытаюсь найти другие способы: https://jason-umiker.medium.com/replacing-docker-desktop-with-wsl2-and-or-rancher-desktop-on-windows-5e036f9dc3a4.
muru avatar
флаг us
Оно по-прежнему будет бесплатным (как пиво) для личного пользования.
Roman Marusyk avatar
флаг us
@muru да, я знаю, но я не собираюсь использовать это в личных целях
Рейтинг:2
флаг vn

Стандартный способ запуска демона Docker Engine (без Docker Desktop) в WSL Ubuntu прост:

запуск докера службы sudo

Это обрабатывает его демонизацию наряду со многими другими задачами. Вы можете увидеть полный сценарий, изучив /etc/init.d/докер. Запустите это вместо того, чтобы пытаться вручную реплицировать процесс запуска.

Если вы хотите, чтобы он запускался автоматически, есть несколько вариантов:

  • Вы уже видели другой ответ, чтобы изменить сценарии запуска. Лично я не большой поклонник этого метода. Во-первых, мне нравится, чтобы мои сценарии запуска были как можно более компактными для лучшей производительности. Во-вторых, такие модификации имеют тенденцию «накапливаться» с течением времени, что усложняет поиск и устранение неполадок в вашей оболочке в будущем. Тем не менее, это неплохой вариант для WSL, по крайней мере, в Windows 10.

    Однако, если вы действительно хотите пойти по этому пути, есть гораздо более простой способ, чем другой ответ. Просто добавьте следующую строку в ваш ~/.bash_profile (поскольку похоже, что вы используете Bash):

    wsl.exe -u root -e sh -c "состояние сервисной докеры > /dev/null || запуск сервисной докеры"
    

    Это все. Вам не нужно вносить изменения в свой sudoers поскольку wsl.exe -u корень выполняет сеанс от имени пользователя root без необходимости ввода пароля.

    Но обязательно воспользуйся своим ~/.bash_profile для этого не ~/.bashrc. Первый выполняется только для авторизоваться оболочки, но последняя выполняется для всех интерактивных оболочек, добавляя дополнительные накладные расходы.

  • Windows 11 делает это еще проще (если вы можете выполнить обновление) благодаря специальной конфигурации для служб, которые вы хотите запускать при запуске экземпляра WSL. Только судо-ви /etc/wsl.conf со следующим содержанием:

    [ботинок]
    command="запуск сервисного докера"
    

    Это будет выполняться только один раз при запуске Ubuntu. Если экземпляр остановлен с wsl --завершить Ubuntu или же wsl --shutdown, он снова запустится при следующем запуске Ubuntu.

    Эти команды также выполняются от имени пользователя root, пароль не требуется.

  • Если вы хотите запускать Docker Engine при каждом входе в Windows, создайте «Запланированное задание» в Windows, которое запускается при входе в систему и указывает на wsl.exe с аргументами -u root -e sh -c "состояние сервисного докера || запуск сервисного докера"

Roman Marusyk avatar
флаг us
Это лучшее решение. Спасибо. Извините, что не мог проверить это раньше
Рейтинг:2
флаг in

Единственный способ, которым я видел, как это делают люди, — запускать Docker на виртуальной машине (что, похоже, не вариант, который вы рассматриваете) или запускать скрипт, который выполняется при запуске WSL.

Вот как вы можете запустить Docker при запуске WSL:

  1. Отредактируйте свой sudoers файл, чтобы ваша учетная запись пользователя могла запускать Docker без запроса пароля:
    Судо Визудо 
    
    Добавьте эту строку:
    rmarusyk ALL=(ALL) NOPASSWD: /usr/bin/dockerd
    
    Примечание: Обязательно измените рмарусик к учетной записи пользователя, под которой вы хотите запускать Docker, если это не то же имя, что и на скриншоте.
  2. Отредактируйте свой ~/.bashrc файл, чтобы проверить, запущен ли Docker, и, если нет, запустить его:
    # Запускаем Docker (если он еще не запущен)
    RUNNING=`ps вспомогательный | grep докерд | grep -v grep`
    если [ -z "$РАБОТАЕТ" ]; тогда
        sudo dockerd > /dev/null 2>&1 &
        отречься
    фи
    
    Примечание: Это можно добавить практически в любом месте, но, как правило, «чище» иметь его в конце файла, чтобы все, что может потребоваться заранее, было настроено/загружено/и т. д.
  3. (Необязательно) Если вы хотите запускать команды Docker без префикса судо, вы можете добавить свою учетную запись пользователя в докер группа:
    sudo usermod -a -G докер $USER
    
  4. Проверьте, работает ли это, закрыв терминал, снова запустив его и проверив статус Docker:
    докер пс 
    
    Примечание: Не стесняйтесь использовать любую команду Docker.

Это должно делать то, что вам нужно

Roman Marusyk avatar
флаг us
Большое тебе спасибо. Оно работает!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.