使用 docker cp 时 json 文件中的 carriage-return 字符 ^M

carriage-return character ^M in json file when using docker cp

我的主机是 windows,我使用的是 docker 桌面。当我使用命令 docker cp 将文件从 windows 复制到容器 Ubuntu 时,json 文件最终将包含回车符-return 字符(即^M)。我怎样才能删除它们?

障碍:

  1. docker cp windows 命令会将 json 复制为 root
  2. 只读
  3. Docker 图片从某处拉取,我只能访问没有 chmod 权限的用户 jovyan。 docker exec -u 0 会 return 错误 Error response from daemon: Multiple IDs found with provided prefix: 0 所以我也不能只以 root 身份登录。
  4. 尝试 WinSCP 将文件移动到容器中,但 return 错误提示“远程端意外关闭网络连接”。我正在使用主机名作为本地主机和端口号的 SFTP。填充。我将密码留空,因为我认为用户 jovyan 不需要密码,因为 docker exec 会直接连接到该用户而不询问密码。

这里的简单答案是安装转换程序,转换行尾并为您处理讨厌的回车returns,dos2unix 总是一个很好的选择。

安装:

sudo apt install dos2unix

用法:

dos2unix <filename>

^M\r 字符的键盘等价物。 sed 是一个默认安装在 Ubuntu 发行版中的程序,因此您应该能够 运行 从 Ubuntu 容器中的 json 文件中删除这些字符:

sed -i 's/\r$//' FILENAME

如果您想知道该命令的作用,这里是信息:

  • sed是一个可以改变文件的流编辑器
  • -i表示原地修改
  • s/\r$// 是一个替换表达式,表示用空
  • 替换行尾的 \r$ 表示行尾)