【问题标题】:Docker root error when starting Cassandra with a script使用脚本启动 Cassandra 时出现 Docker 根错误
【发布时间】:2018-01-09 09:28:55
【问题描述】:

我正在尝试在 Docker 中启动 Cassandra。

如果我用 Dockerfile 结束

CMD["cassandra", "-f"]

它开始没有问题。但是当我使用脚本时:

COPY ./launch_cassandra.sh /tmp/cassandra/launch_cassandra.sh
CMD["sh", "/tmp/cassandra/launch_cassandra.sh"]

launch_cassandra.sh 仅包含:

cassandra -f

我收到以下错误:

不建议以 root 用户或组运行 Cassandra - 请 使用不同的系统用户启动 Cassandra。

为什么这些不等价?为什么脚本以 root 身份运行?

【问题讨论】:

  • 我不确定如果您在没有脚本的情况下运行它为什么会起作用,但您应该将用户设置为 cassandra。 docs.docker.com/engine/reference/builder/#user
  • 你可以从官方 Cassandra Docker 镜像的 github repo 中获得一些关于你的 Dockerfile 的灵感:github.com/docker-library/cassandra
  • 其实我的Dockerfile扩展了官方的(使用FROM cassandra),所以用户设置为cassandra。但我只是注意到入口点是一个名为docker-entrypoint.sh 的脚本,当第一个参数是 cassandra 时,它会执行“特殊”操作。所以这段代码在cassandra在CMD中时执行,而不是在我启动脚本时执行:差异可能来自于它,我会看看这个脚本

标签: docker cassandra root


【解决方案1】:

正如上面 cmets 中所说,我的 Dockerfile 扩展了官方文件(使用 FROM cassandra),其中使用入口点脚本(docker-entrypoint.sh)来设置一些变量。

所以这些确实是在 CMD 包含 cassandra 时设置的,但不是在脚本中设置的:这就是差异的来源。

【讨论】:

  • 你是如何解决这个问题的?
  • 非常老的问题 - 但据我记得,它在设置与 Cassandra 图像的入口点脚本中相同的变量后起作用
  • 谢谢回复,我试试看
【解决方案2】:

如果您要扩展 cassandra 映像,则您创建了一个 cassandra 用户(名称可能不同,请参阅所需映像的 Dockerfile,例如 https://github.com/docker-library/cassandra/blob/master/3.11/Dockerfile)。
唯一缺少的是在您的 Dockerfile 上设置用户,例如:

FROM cassandra:3.11.10
USER cassandra
CMD ["cassandra" "-f"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-26
    • 2012-09-03
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多