Cifs 使用 docker-compose 安装在 docker 容器中
Cifs mount in docker container with docker-compose
我想将一个目录挂载到 docker 容器中。
由于有解决方案,我尝试了 --privileged 标志并设置所需的功能:
docker-compose.yaml:
version: '2.0'
services:
mounttest:
image: test
privileged: true
cap_add:
- SYS_ADMIN
- DAC_READ_SEARCH
restart: unless-stopped
container_name: test
mem_limit: 500m
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/apps/docker-test/
Docker 文件:
FROM ubuntu:18.04
ADD . /apps/docker-test/
# APT-GET
RUN apt-get update && apt-get install -y \
sudo \
cifs-utils
# CHMOD SHELL SCRIPTS
RUN chmod 0755 /apps/docker-test/run.sh
RUN chmod 0755 /apps/docker-test/build.sh
RUN /apps/docker-test/build.sh
CMD bash /apps/docker-test/run.sh
build.sh:
mkdir -p /test_folder
echo "Mount"
sudo mount -t cifs -o username=XXX,password=XXX,workgroup=XX //server/adress$ /test_folder
run.sh 启动一个 python 脚本
这行不通,改为:
docker-compose build
给我错误:
Unable to apply new capability set
我找到的所有解决方案都只提到了设置的特权标志或功能。有人可以帮忙吗?
发生此错误是因为您试图在 build
步骤中安装设备。此时,这些功能 aren't available for the build container to use and it seems to be rolling out as a flag for disabling security at buildkit 而不是在构建时启用自定义功能。
通常的做法是在开始构建过程时准备好 CIFS 挂载,因为它不会暴露任何身份验证、设备或挂载点,而且 docker处理更改并对它们做出反应(因为构建过程会在构建之前努力缓存所有内容)。
如果您仍想这样做,则需要一些额外的步骤来启用来自 buildkitd
和 docker buildx
的不安全标志:
请注意,截至今天 (2020-09-09),支持仍处于试验阶段,可能会发生无法预料的后果。
- 确保您使用的是 docker 版本 19.03 或更高版本。
- 启用实验功能,方法是将密钥
"experimental":"enabled"
添加到您的 ~/.docker/config.json
- 创建并使用启用了
security.insecure
权利的构建器:
docker buildx create --driver docker-container --name local \
--buildkitd-flags '--allow-insecure-entitlement security.insecure' \
--use
- 通过在第一行之前添加以下内容来更改
Dockerfile
以使用实验性语法:
# syntax = docker/dockerfile:experimental
- 更改 Dockerfile 指令,使其在没有安全限制的情况下运行代码:
RUN --security=insecure /apps/docker-test/build.sh
- 使用 BuildKit 和
--allow security.insecure
标志构建您的 docker 图像:
docker buildx build --allow security.insecure .
这样您的构建将能够摆脱安全限制。
我必须重申,出于以下几个原因,这不是推荐的做法:
- 它将公开其他图像的构建步骤以升级该权限漏洞。
- 生成器无法正确缓存该层,因为它使用了不安全的功能。
牢记这一点,祝您安装愉快:)
我找到的答案是将 mount 命令放入 run.sh 文件中。由于 Dockerfile 中的命令(或 CMD)仅在 运行
时执行
docker-compose up
只有在预先完成的构建已经完成后才会执行挂载。
因此,在启动python脚本之前,先执行mount命令。
就我而言,这仅适用于将特权标志设置为 true 的情况。
我想将一个目录挂载到 docker 容器中。 由于有解决方案,我尝试了 --privileged 标志并设置所需的功能:
docker-compose.yaml:
version: '2.0'
services:
mounttest:
image: test
privileged: true
cap_add:
- SYS_ADMIN
- DAC_READ_SEARCH
restart: unless-stopped
container_name: test
mem_limit: 500m
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/apps/docker-test/
Docker 文件:
FROM ubuntu:18.04
ADD . /apps/docker-test/
# APT-GET
RUN apt-get update && apt-get install -y \
sudo \
cifs-utils
# CHMOD SHELL SCRIPTS
RUN chmod 0755 /apps/docker-test/run.sh
RUN chmod 0755 /apps/docker-test/build.sh
RUN /apps/docker-test/build.sh
CMD bash /apps/docker-test/run.sh
build.sh:
mkdir -p /test_folder
echo "Mount"
sudo mount -t cifs -o username=XXX,password=XXX,workgroup=XX //server/adress$ /test_folder
run.sh 启动一个 python 脚本
这行不通,改为:
docker-compose build
给我错误:
Unable to apply new capability set
我找到的所有解决方案都只提到了设置的特权标志或功能。有人可以帮忙吗?
发生此错误是因为您试图在 build
步骤中安装设备。此时,这些功能 aren't available for the build container to use and it seems to be rolling out as a flag for disabling security at buildkit 而不是在构建时启用自定义功能。
通常的做法是在开始构建过程时准备好 CIFS 挂载,因为它不会暴露任何身份验证、设备或挂载点,而且 docker处理更改并对它们做出反应(因为构建过程会在构建之前努力缓存所有内容)。
如果您仍想这样做,则需要一些额外的步骤来启用来自 buildkitd
和 docker buildx
的不安全标志:
请注意,截至今天 (2020-09-09),支持仍处于试验阶段,可能会发生无法预料的后果。
- 确保您使用的是 docker 版本 19.03 或更高版本。
- 启用实验功能,方法是将密钥
"experimental":"enabled"
添加到您的~/.docker/config.json
- 创建并使用启用了
security.insecure
权利的构建器:
docker buildx create --driver docker-container --name local \
--buildkitd-flags '--allow-insecure-entitlement security.insecure' \
--use
- 通过在第一行之前添加以下内容来更改
Dockerfile
以使用实验性语法:
# syntax = docker/dockerfile:experimental
- 更改 Dockerfile 指令,使其在没有安全限制的情况下运行代码:
RUN --security=insecure /apps/docker-test/build.sh
- 使用 BuildKit 和
--allow security.insecure
标志构建您的 docker 图像:
docker buildx build --allow security.insecure .
这样您的构建将能够摆脱安全限制。 我必须重申,出于以下几个原因,这不是推荐的做法:
- 它将公开其他图像的构建步骤以升级该权限漏洞。
- 生成器无法正确缓存该层,因为它使用了不安全的功能。
牢记这一点,祝您安装愉快:)
我找到的答案是将 mount 命令放入 run.sh 文件中。由于 Dockerfile 中的命令(或 CMD)仅在 运行
时执行docker-compose up
只有在预先完成的构建已经完成后才会执行挂载。
因此,在启动python脚本之前,先执行mount命令。 就我而言,这仅适用于将特权标志设置为 true 的情况。