从docker compose内部运行sudo命令

时间:2019-03-19 19:27:49

标签: 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文件中注释该命令,但是我很想知道有什么方法可以从docker-compose.yml文件内部运行该命令吗?

2 个答案:

答案 0 :(得分:3)

我可能为您提供解决方案。您可以在自定义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用户。

答案 1 :(得分:2)

我是strongbox/strongbox的开发人员之一。我们很高兴有人尝试使用我们的Docker映像进行开发:)

  

现在此命令需要sudo,否则会出现权限错误。

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

  1. 创建ID为1000.1000的用户和组:
    groupadd -g 1000 jenkins
    useradd -u 1000 -g 1000 -s /bin/bash -m jenkins
    
  2. 按如下所示对克隆的保险箱盒项目进行小丑/ chmod操作:
    chown -R `id -u`.1001 /path/to/strongbox-project
    chmod -R 775 /path/to/strongbox-project
    
  3. 再试一次docker-compose up

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