docker exec -> 通过 ssh 执行时权限被拒绝
docker exec -> permission denied when executing through ssh
我正在尝试在远程服务器中 运行ning 的 docker 容器上执行命令。我 运行 通过 ssh 执行大多数命令,它们都可以正常工作。但是,此命令修改了文件 /etc/environment
,我收到“权限被拒绝”错误。
有问题的命令是docker exec container_id echo 'WDS_SOCKET_PORT=XXXXX' >> /etc/environment
- 如果我 运行 来自 docker 主机的命令,它有效
- 如果我 运行 远程使用
ssh user@ip docker exec container_id ls
一个简单的命令,它就可以工作
- 如果我 运行 这个命令远程使用
ssh user@ip docker exec container_id echo 'WDS_SOCKET_PORT=XXXXX' >> /etc/environment
我得到 sh: 1: cannot create /etc/environment: Permission denied
我尝试将选项 -u 0
添加到 docker exec 命令,但没有成功。
我不介意更改 Dockerfile,因为我可以毫无问题地终止、删除或重新创建此容器。
错误不是来自 docker 或 ssh,而是来自您的 shell 解析您想要 运行 的命令。您正在尝试修改主机上的文件。要在容器内进行 io 重定向,您需要在那里 运行 一个 shell 并使用 shell.
解析命令
ssh user@ip "docker exec container_id /bin/sh -c 'echo \"WDS_SOCKET_PORT=XXXXX\" >> /etc/environment'"
编辑:请注意,整个 docker 命令应该用引号括起来。我相信这是因为 ssh 可能会将命令的不同部分解析为 docker 命令的参数。这样,每个 sub-command 都被清楚地分隔了。
我正在尝试在远程服务器中 运行ning 的 docker 容器上执行命令。我 运行 通过 ssh 执行大多数命令,它们都可以正常工作。但是,此命令修改了文件 /etc/environment
,我收到“权限被拒绝”错误。
有问题的命令是docker exec container_id echo 'WDS_SOCKET_PORT=XXXXX' >> /etc/environment
- 如果我 运行 来自 docker 主机的命令,它有效
- 如果我 运行 远程使用
ssh user@ip docker exec container_id ls
一个简单的命令,它就可以工作 - 如果我 运行 这个命令远程使用
ssh user@ip docker exec container_id echo 'WDS_SOCKET_PORT=XXXXX' >> /etc/environment
我得到sh: 1: cannot create /etc/environment: Permission denied
我尝试将选项 -u 0
添加到 docker exec 命令,但没有成功。
我不介意更改 Dockerfile,因为我可以毫无问题地终止、删除或重新创建此容器。
错误不是来自 docker 或 ssh,而是来自您的 shell 解析您想要 运行 的命令。您正在尝试修改主机上的文件。要在容器内进行 io 重定向,您需要在那里 运行 一个 shell 并使用 shell.
解析命令ssh user@ip "docker exec container_id /bin/sh -c 'echo \"WDS_SOCKET_PORT=XXXXX\" >> /etc/environment'"
编辑:请注意,整个 docker 命令应该用引号括起来。我相信这是因为 ssh 可能会将命令的不同部分解析为 docker 命令的参数。这样,每个 sub-command 都被清楚地分隔了。