You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器startup.sh追加命令后dotnet执行dll报错咨询

问题根因

两个核心问题导致报错:

  1. 换行符格式不兼容:startup.sh是在Windows环境下编辑保存的,默认使用了CRLF(\r\n)换行格式,而Linux系统的shell仅识别LF(\n)作为换行符,会把每行末尾的\r(回车控制符)当成命令内容的一部分。
    修改脚本前,dotnet ConsoleApp4.dll是文件最后一行,shell会自动忽略文件末尾的孤立\r字符,所以命令能正常执行;追加echo命令后,dotnet命令行末尾的\r被保留,实际传入的dll文件名是ConsoleApp4.dll\r(末尾带不可见回车符),系统自然找不到对应文件。错误输出里的文本错位(' does not exist.tion 'ConsoleApp4.dll)就是\r把输出光标拉回行首、覆盖了前面输出内容的典型现象。
  2. 脚本shebang声明错误:脚本第一行写的是#!/bin,而bash解释器的实际路径是/bin/bash,属于不规范写法,当前因为ENTRYPOINT显式调用bash startup.sh所以没触发这个问题,但属于潜在隐患。
修复方案

按以下步骤操作即可解决:

  • 转换脚本换行格式:将startup.sh的换行格式从CRLF切换为Linux兼容的LF格式
    • 用VS Code等编辑器修改的话,点击窗口右下角的换行格式标识,选择LF后保存即可
    • 已经上传到Linux环境的话,直接执行sed -i 's/\r$//' startup.sh就能批量清除所有行尾的\r字符
  • 修正shebang声明:把脚本第一行的#!/bin改为#!/bin/bash
  • 修正后的完整startup.sh内容如下:
#!/bin/bash
echo "Starting dot net console app"
dotnet ConsoleApp4.dll
echo "Completed execution"
  • 重新执行docker build构建镜像,再启动容器就可以正常运行,dotnet命令执行完成后会正常打印Completed execution。

内容的提问来源于stack exchange,提问作者Silly John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:21:25