从docker compose内部运行sudo命令
我正在使用AWS EC2实例,并在AWS linux上安装了docker和docker compose 现在我有了一个docker compose.yml文件,它正在尝试使用命令从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文件中对此命令进行注释,但我想知道是否有
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
-您需要解决以下问题:
1000.1000
的用户和组:
groupadd -g 1000 jenkins
useradd -u 1000 -g 1000 -s /bin/bash -m jenkins
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容器。请告诉我是否还有其他可以帮助的内容,或者如果有用,请接受答案。谢谢