【问题标题】:Why does creating a file inside a docker-machine VM result in permission denied?为什么在 docker-machine VM 中创建文件会导致权限被拒绝?
【发布时间】:2017-10-12 14:30:59
【问题描述】:

我想在使用 docker-machine 创建的 vm 中创建文件 /etc/docker/daemon.json 通过 SSH 进入它,如下所示

docker-machine ssh manager1 "sudo echo \"{ \"insecure-registries\":[\"192.168.100.99:5000\"] }\" >| /etc/docker/daemon.json"

上述失败并显示消息

sh: can't create /etc/docker/daemon.json: Permission denied

上述如何实现类似于我尝试实现的方式,因为我需要将其放置在非交互式 bash 脚本中。

【问题讨论】:

  • 您可以查看容器中的 UID 和 GID 并发现它们很有趣...我通过添加一个设置正确权限的 shell 脚本来管理创建文件,例如对于 www-data 用户。但是,我对这个“解决方案”并不满意。
  • 您可以通过自己的修改创建一个 boot2docker 自定义 iso...也许这就像用大锤敲碎坚果...但它确实有效。
  • 感谢您的建议。 BMitch 下面的回答奏效了!

标签: bash docker sh boot2docker docker-machine


【解决方案1】:

您的命令以 root 身份运行 echo,但输出由以您的用户身份运行的 shell 重定向处理。尝试使用以下管道连接到 sudo running tee:

docker-machine ssh manager1 "echo \"{ \\\"insecure-registries\\\":[\\\"192.168.100.99:5000\\\"] }\" \
  | sudo tee /etc/docker/daemon.json"

请注意,我还再次转义了 echo 中的引号,否则引号会被 shell/echo 命令吃掉。


对于这个特定的用例,我建议您使用以下方式创建机器:

docker machine create --engine-insecure-registry 192.168.100.99:5000 ...

未来。

【讨论】:

  • 谢谢!您的两种解决方案都有效。我选择了后者,因为它似乎是您建议的这个特定用例的更好方法。
猜你喜欢
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 2015-10-02
  • 2023-04-03
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
相关资源
最近更新 更多