1

我对 kubernetes 和 docker 还很陌生,所以请耐心等待。

我正在尝试在 linux 中挂载一个 Windows 共享,该共享包含在 docker 中,这是一个 kubernetes pod。

我设法在 kubernetes 和 docker 中获得了所有正确的权限来手动挂载共享。但是我需要通过 Dockerfile 来完成,因为它需要自动化。

这是我的 Dockerfile:

WORKDIR /app
COPY ./start-script.sh ./start-script.sh

RUN apt-get update && apt-get install -y cifs-utils
RUN mkdir Windows-Share
# RUN mount.cifs <Window share folder> /app/Windows-Share/ -o username=<username>,password=<password>,domain=<domain>

ENTRYPOINT ["bash", "./start-script.sh"]

这是我的 start-script.sh:

#!/bin/bash
mount.cifs <Window share folder> /app/Windows-Share/ -o username=<username>,password=<password>,domain=<domain>
exec dotnet <dotnet dll>

现在应该注意的是,我无权访问任何 docker 命令,它们都是由 kubernetes 处理的。Kubernetes 创建 pod 后,日志将显示:

挂载错误(13):权限被拒绝

参考 mount.cifs(8) 手册页(例如 man mount.cifs)

这让我很困惑,因为如果我登录到 kubernetes pod 并手动运行 mount 命令,它就可以正常安装。我错过了什么?

4

2 回答 2

1

我遇到过同样的问题。Mount 在服务器本身上工作,将图像作为 docker 容器运行,但不将图像作为 kubernetes 部署运行。就我而言,它有助于为部署添加具有特权和一些 linux 功能的安全上下文:

securityContext:
        capabilities:
          add:
            - SYS_ADMIN
            - DAC_READ_SEARCH
            - NET_BIND_SERVICE
        privileged: true
于 2021-02-17T08:04:58.490 回答
0

正确的方法往往是在容器外部提供适当的存储设置,而不是尝试在容器中安装东西。在 Kubernetes 的特定情况下,这意味着设置适当的,然后将它们挂载到您的 pod 规范中。

没有开箱即用的 SMB/CIFS 卷驱动程序,但看起来微软发布了可以提供帮助的 Kubernetes 存储插件

于 2018-08-03T21:43:18.483 回答