docker-compose启动RabbitMQ容器出现sleep无效时间间隔‘3\r’错误是什么原因?
报错原因
你遇到的报错是Shell脚本换行符格式不兼容导致的:
你本地的init.sh脚本是在Windows系统下编辑的,默认使用CRLF(\r\n)作为换行符,而容器内的Linux系统Shell只识别LF(\n)格式的换行符,解析脚本时会把行尾的\r当成内容的一部分,所以解析sleep 3这一行时,会把参数识别为非法的3\r,触发参数错误。
解决方案
你可以任选以下一种方法修复:
- 调整本地代码编辑器的配置,将
init.sh的换行符格式从CRLF改为LF后重新保存,再重新执行docker-compose up --build构建启动即可。常见的VS Code、JetBrains系列编辑器都可以在右下角状态栏直接切换换行符格式。 - 在Dockerfile中新增自动转换换行符的逻辑,无需修改本地文件,修改后的Dockerfile对应片段如下:
FROM rabbitmq:3-management RUN mkdir -p /scripts COPY init.sh /scripts WORKDIR /scripts # 新增以下行自动删除脚本中的\r字符 RUN sed -i 's/\r$//' init.sh RUN chmod +x init.sh RUN rabbitmq-plugins enable rabbitmq_web_mqtt ENTRYPOINT ["/bin/bash"] CMD ["./init.sh"]
- 如果你本地安装了
dos2unix工具,直接在本地项目目录执行dos2unix init.sh转换脚本格式后再重新构建即可。
内容的提问来源于stack exchange,提问作者user17219965
相关产品推荐
相关产品推荐

