Nano Hash - криптовалюты, майнинг, программирование

Запускайте команды sudo из docker compose

Я использую экземпляр AWS EC2 и установил docker и docker-compose на AWS linux.

Теперь у меня есть файл docker-compose.yml, который пытается выполнить команду mkdir -p /workspace/.m2/repositories. Теперь эта команда требует sudo, иначе она выдает ошибку прав доступа.

Я попытался добавить sudo внутрь docker-compose, но это дало мне сообщение об ошибке

судо: команда не найдена

Я могу запустить эту команду вручную и могу прокомментировать эту команду внутри файла docker-compose.yml, но мне интересно узнать, есть ли способ запустить эту команду изнутри файла docker-compose.yml?


  • Установите sudo в контейнер. 19.03.2019
  • Я использую docker-compose. Поэтому я предполагаю, что мне нужно написать команду install sudo внутри файла docker-compose.yml. Пожалуйста, поправьте меня, если я ошибаюсь. 19.03.2019
  • @YugSingh - я думаю, что ваша команда sudo должна быть в Dockerfile, как намекает tkausl 19.03.2019
  • Что вы имеете в виду под «sudo внутри docker-compose»? docker-compose — это просто оболочка вокруг docker cli, она больше ничего не делает, вы можете запустить что-то внутри контейнера docker, например докер-файл 19.03.2019
  • @ScottSkiles Я вытащил репозиторий github, и он содержит только docker-compose.yml, и там нет файла docker. 19.03.2019
  • потому что docker compose хранит ссылку на изображения и окружающую информацию, например. сети, тома и все остальное. вся логика хранится внутри образа докера 19.03.2019
  • вам нужно выполнить docker-compose up -d для запуска контейнера docker с информацией, описанной в этом файле docker-compose. 19.03.2019
  • Вы можете запустить sudo docker-compose up? Когда вы убедитесь, что это работает, вы можете запустить sudo docker-compose up -d, чтобы запустить его отдельно. 19.03.2019
  • @ScottSkiles Я могу запустить docker-compose up, и он работает нормально. Затем он пытается запустить mkdir внутри контейнера и говорит, что sudo не существует. Я думал, что это как-то связано с хост-машиной, но, как упомянул @Dmitri, docker compose — это просто оболочка вокруг docker-cli, я думаю, что compose не может запустить sudo внутри контейнера eth. Также я попытался запустить docer-compose up -d, но contaienr остановился через несколько секунд. 19.03.2019
  • А как же sudo docker-compose up? Вы уже пытались использовать эту команду с sudo в ec2? У вас есть разрешения sudo для экземпляра EC2? Вы не запускаете sudo изнутри docker-compose. Вы запускаете sudo из экземпляра ec2. Если это не сработает, то вы правы, вам нужно исправить sudo в контейнере. Можете ли вы указать источник файла docker-compose.yml ? 19.03.2019
  • Можете ли вы поделиться своими файлами Dockerfile и docker-compose.yml? Если вы выполняете mkdir в принадлежащей root области файловой системы при запуске, а пользователь в контейнере не root, то вам, вероятно, следует создать резервную копию и сделать это в Dockerfile - там вы можете изменить пользователя с помощью инструкции USER. 19.03.2019
  • @ScottSkiles да, я перехожу по этой ссылке strongbox.github. io/руководство разработчика/ 19.03.2019
  • @AndreasLorenzen, пожалуйста, найдите ссылку в комментарии выше 19.03.2019
  • когда я делаю docker-compose, я получаю сообщение об ошибке. Теперь я смог запустить контейнер вручную, и когда внутри контейнера я попробовал команду mkdir, у пользователя не было разрешений, а sudo не существовало. 19.03.2019

Ответы:


1

У меня может быть решение для вас. Я думаю, вы можете расширить изображение strongbox в пользовательском Dockerfile, чтобы решить эту проблему.

Создайте новый Dockerfile, как этот:

Dockerfile

FROM strongboxci/alpine:jdk8-mvn-3.5

USER root

RUN mkdir -p /workspace/.m2/repositories
RUN chown jenkins:jenkins /workspace/.m2/repositories

USER jenkins

Затем создайте образ примерно так:

docker build -t mystrongbox:01 .

И, наконец, обновите файл docker-compose.yml следующим образом:

docker-compose.yml

version: '2'
services:
  strongbox-from-web-core:
    image: mystrongbox:01
    command:
      - /bin/bash
      - -c
      - |
         echo ""
         echo "[NOTICE]   This will take at least 2 to 5 minutes to start depending on your machine and connection!"
         echo ""
         echo "           Open http://localhost:48080/storages to browse the repository contents."
         echo ""
         sleep 5
         mkdir -p /workspace/.m2/repositories
         mvn clean install -DskipTests -Dmaven.repo.local=/workspace/.m2/repositories
         cd strongbox-web-core
         mvn spring-boot:run -Dmaven.repo.local=/workspace/.m2/repositories
    ports:
      - 48080:48080
    volumes:
      - ./:/workspace
    working_dir: /workspace

Наконец, попробуйте еще раз:

docker-compose up

Тогда у вас уже будет каталог, созданный в образе, и право собственности будет установлено для пользователя jenkins.

19.03.2019
  • Пожалуйста, дайте мне знать, если я могу чем-то еще помочь, или, возможно, примите ответ, если он был полезен. Спасибо! 26.03.2020

  • 2

    Я один из разработчиков в strongbox/strongbox. Мы очень рады, что кто-то пробует наши образы Docker для разработки :)

    Теперь эта команда требует sudo, иначе выдает ошибку разрешений.

    То, что вы испытываете, вероятно, связано с проблемой разрешения. Наши образы Docker работают как user.group = 1000.1000 (обычно это первый пользователь во многих дистрибутивах). Я подозреваю, что ваш UID/GID отличается, что вы можете проверить, выполнив id -u и id -g. Если это что-то другое, чем 1000.1000, вам нужно будет сделать обходной путь:

    1. Создайте пользователя и группу с идентификаторами 1000.1000:
      groupadd -g 1000 jenkins
      useradd -u 1000 -g 1000 -s /bin/bash -m jenkins
      
    2. Chown/chmod для клонированного проекта сейфа:
      chown -R `id -u`.1001 /path/to/strongbox-project
      chmod -R 775 /path/to/strongbox-project
      
    3. Попробуйте еще раз docker-compose up

    В этом образе не установлено sudo, поэтому вы не сможете его запустить. Впрочем, он вам тоже не нужен, так как /workspace монтируется из вашей ФС (это проект сейфа) и в томе будет написано /workspace/.m2/repository.

    21.03.2019
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..