从docker compose内部运行sudo命令

从docker compose内部运行sudo命令,docker,amazon-ec2,docker-compose,sudo,strongbox,Docker,Amazon Ec2,Docker Compose,Sudo,Strongbox,我正在使用AWS EC2实例,并在AWS linux上安装了docker和docker compose 现在我有了一个docker compose.yml文件,它正在尝试使用命令mkdir-p/workspace/.m2/repositories。现在这个命令需要sudo,否则它会给出权限错误 我尝试在docker compose中添加sudo,但它给了我一个错误提示 sudo:未找到命令 我可以手动运行此命令,并可以在docker compose.yml文件中对此命令进行注释,但我想知道是否有

我正在使用AWS EC2实例,并在AWS linux上安装了docker和docker compose

现在我有了一个docker compose.yml文件,它正在尝试使用命令
mkdir-p/workspace/.m2/repositories
。现在这个命令需要sudo,否则它会给出权限错误

我尝试在docker compose中添加sudo,但它给了我一个错误提示

sudo:未找到命令


我可以手动运行此命令,并可以在
docker compose.yml
文件中对此命令进行注释,但我想知道是否有任何方法可以从
docker compose.yml
文件中运行此命令?

我可能会为您提供一个解决方案。我认为,您可以在自定义的
Dockerfile
中扩展
strongbox
图像来解决这个问题

创建一个新的
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
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构建-t mystrongbox:01。
最后将
docker compose.yml
文件更新为:

docker compose.yml

FROM strongboxci/alpine:jdk8-mvn-3.5

USER root

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

USER jenkins
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编写

然后您将在映像中创建目录,并将所有权设置为
jenkins
用户。

我是。我们很高兴有人在试用我们的Docker图像进行开发:)

现在这个命令需要sudo,否则它会给出权限错误

您遇到的问题可能是权限问题。我们的Docker映像以
user.group=1000.1000
的身份运行(这通常是许多发行版上的第一个用户)。我怀疑您的UID/GID不同,您可以通过执行
id-u
id-g
来检查。如果它不是
1000.1000
-您需要解决以下问题:

  • 创建ID为
    1000.1000
    的用户和组:
    groupadd -g 1000 jenkins
    useradd -u 1000 -g 1000 -s /bin/bash -m jenkins
    
  • Chown/chmod克隆的保险箱项目如下:
    chown -R `id -u`.1001 /path/to/strongbox-project
    chmod -R 775 /path/to/strongbox-project
    
  • 重试
    docker compose up

  • 此映像未安装
    sudo
    ,因此您无法执行它。但是,您也不需要它,因为
    /workspace
    正在从您的FS装载(这是strongbox项目),它将在卷中写入
    /workspace/.m2/repository

    在容器中安装sudo。我正在使用docker compose。所以我假设我需要在docker-compose.yml文件中编写install sudo命令。如果我错了,请纠正我。@YugSingh-我认为你的sudo命令应该在TkauslB提到的
    Dockerfile
    中,因为docker compose stores链接到图像和周围信息,例如网络、卷和其他一切。docker imageu中的所有逻辑存储都需要执行docker compose up-d以使用此docker compose文件中描述的信息运行docker容器。请告诉我是否还有其他可以帮助的内容,或者如果有用,请接受答案。谢谢