通过docker compose up -d启动相关容器,发现一个容器一直 restart,无法正常启动。
1)查看容器日志
# 查看容器日志(关键信息常在此)
docker logs <容器ID或名称>
# 实时跟踪日志
docker logs -f <容器ID或名称>
发现错误:exec /start.sh: no such file or directory
这应该是启动容器命令失败。
2)以交互式方式进入容器(针对启动即退出的容器)
# 以交互模式启动容器(不运行默认命令)
docker run -it --entrypoint /bin/bash <镜像名>
# 或(如果镜像无 bash)
docker run -it --entrypoint /bin/sh <镜像名>
查看 start.sh 文件是存在的,尝试在容器中启动:./start.sh,报错:
bash: ./start.sh: /bin/bash^M: bad interpreter: No such file or directory
这次找到了根本原因,是 start.sh 文件的问题。
3)这不是容器的问题,是 start.sh 文件在 Windows 上被编辑过,导致换行符变成了 Windows 的 CRLF(\r\n),而 Linux 只认 LF(\n)。
安装 dos2unix:
sudo apt-get install -y dos2unix
并一键转换:
dos2unix start.sh
处理完后,可以验证:
# 看有没有 ^M
cat -v start.sh
# 应该看不到 ^M 了
# 给执行权限(如果还没给)
chmod +x start.sh
4)重新构建镜像。
启动容器 OK。

929

被折叠的 条评论
为什么被折叠?



