我对kubernetes和docker还是很陌生,所以请耐心等待我。
我正在尝试在docker中包含的linux中挂载Windows共享,这是一个kubernetes容器。
我设法在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容器并手动运行mount命令,它将很好地安装。我想念什么?
答案 0 :(得分:1)
正确的方法往往是在容器外部提供适当的存储设置,而不是尝试在容器中装入东西。对于Kubernetes而言,这意味着要设置适当的Volumes,然后将其安装在您的pod规范中。
没有现成的SMB / CIFS卷驱动程序,但是看起来像Microsoft publishes Kubernetes storage plugins可以提供帮助。
答案 1 :(得分:0)
我遇到了同样的问题。 Mount 在服务器本身上运行,将图像作为 docker 容器运行,而不是将图像作为 kubernetes 部署运行。就我而言,它有助于为具有特权和一些 linux 功能的部署添加安全上下文:
securityContext:
capabilities:
add:
- SYS_ADMIN
- DAC_READ_SEARCH
- NET_BIND_SERVICE
privileged: true