【问题标题】:Persistent /etc/passwd on a docker containerdocker 容器上的持久性 /etc/passwd
【发布时间】:2018-05-28 07:21:33
【问题描述】:

我创建了一个 docker 镜像,允许用户使用 SSH 连接它。

出于安全原因,我希望用户可以更改他们的密码。我只使用 docker 命名卷,所以我无法绑定 /etc/passwd 也不想挂载所有 /etc

有什么想法吗?提前致谢。

【问题讨论】:

  • 为什么你不设置默认密码,他们可以在容器中连接和更改? (或者你可以在 dockerfile 中说 ADD myfolder/passwd /etc/passwd - 但是你应该小心这个文件 - 或者只是创建一个在启动时运行并从另一个路径读取密码并在 passwd 中更改它的脚本)
  • 是的,用户使用 ssh 登录后会更改密码。但是,如果我重建我的映像或重新启动(而不是恢复)我的容器,所有密码都将丢失。所以我可以保存 /etc/passwd 文件并在之后恢复它,但我不喜欢这种方式。没有更干净的东西?
  • 谢谢,我认为这是正确的做法。但这对我的使用来说似乎太不成比例了。我找到了解决方案,请参阅我自己的问题回复。

标签: linux docker mount passwd volumes


【解决方案1】:

我终于找到了这个解决方案:

  • 创建命名卷
  • 安装它(例如在 /users 中)
  • 在上面设置一个影子文件
  • 在容器启动时,在 /etc/shadow 上为 /users/shadow 创建一个链接

【讨论】:

    【解决方案2】:

    在这个question 中,有人问是否可以使用 docker compose 将文件作为卷挂载(答案是肯定的),所以如果可以使用 compose 来实现,我认为这也可以使用码头工人。 我知道这与您的问题不同,因为它们使用主机目录/文件,但是命名为卷的 docker(如您所见here)用于使容器主机独立,这是通过创建一些由 docker 处理的卷完成的。
    因此,尝试创建一个卷并将该卷挂载到 passwd 文件的位置。

    【讨论】:

    • 谢谢。但我相信以“/”开头的卷语法适用于与 docker 主机绑定挂载,而不适用于 docker 命名卷。执行以下操作:docker volume create passwd && docker container run -ti --mount source=passwd,target=/etc/passwd alpine 失败:docker:来自守护进程的错误响应:readdirent:不是目录。
    猜你喜欢
    • 2018-05-07
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    相关资源
    最近更新 更多