docker启动报错:standard_init_linux.go:211: exec user process caused "no such file or directory"

本文介绍了一种常见的Docker容器启动后立即退出的问题及其解决方案。问题源于在Windows环境下编辑的docker-entrypoint.sh脚本文件格式为DOS,而非Unix。通过使用gitbash中的vi编辑器将文件格式改为Unix,重新构建镜像后,问题得以解决。

     如题所示,根据自己构建的镜像启动docker容器,直接退出,查看容器日志报错信息,没有任何别的信息。网上搜索这个问题,发现很多人都遇到过,解决办法也各不相同,最后发现一篇文章。受到启发,我的项目是java项目,通过ENTRYPOINT命令启动脚本docker-entrypoint.sh来构建一个在后台运行的服务。而我的docker-entrypoint.sh是在windows下编辑的,自然fileformat是dos,这里需要修改为unix,修改办法也很简答,无需再在linux下操作,我们一般机器上安装了git工具,自带了git bash命令行工具,进入git bash,找到该文件docker-entrypoint.sh,然后使用vi编辑,修改fileformat=unix,如下所示。

    

    修改完成,然后再次构建镜像即可,启动新的镜像,就不会报错了,这个错误一般很难排查。特此记录一下,希望能够帮助到遇到这个错误的人。 

    

在使用 Docker 运行 MySQL 时,如果遇到 `standard_init_linux.go:211: exec user process caused "exec format error"` 错误,这通常表明容器启动时无法正确执行入口点或命令。以下是一些可能的原因及解决方法: ### 1. **镜像架构不匹配** 该错误可能发生在尝试运行与当前系统架构不兼容的镜像时。例如,在 ARM 架构的系统上运行为 x86 架构构建的镜像。 - **解决方法**:确保使用的镜像支持当前主机的架构。可以通过指定镜像的架构版本来解决此问题。例如,在拉取镜像时使用特定平台的标签: ```bash docker pull --platform linux/amd64 mysql:8.0.32 ``` 然后运行镜像时加上 `--platform` 参数: ```bash docker run --platform linux/amd64 -p 3317:3306 --name mysql-slaver-01 -v /mydata/mysql/slaver1/conf:/etc/mysql/conf.d -v /mydata/mysql/slaver1/logs:/var/log/mysql -v /mydata/mysql/slaver1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --privileged=true --restart=always --network mysql-cluster -d mysql:8.0.32 ``` ### 2. **入口点脚本权限问题** 如果镜像的入口点脚本(如 `docker-entrypoint.sh`)没有可执行权限,也可能导致此错误。 - **解决方法**:检查并确保入口点脚本具有可执行权限。可以在 Dockerfile 中添加以下命令来设置权限: ```Dockerfile RUN chmod +x /usr/local/bin/docker-entrypoint.sh ``` 如果使用的是官方镜像,通常不需要手动修改,但如果是自定义构建的镜像,确保脚本的权限正确。 ### 3. **文件格式问题** 如果入口点脚本是在 Windows 系统上编辑的,可能会因为换行符格式(CRLF)的问题导致脚本无法执行。 - **解决方法**:将脚本的换行符转换为 Unix 格式(LF)。可以使用 `dos2unix` 工具进行转换: ```bash dos2unix docker-entrypoint.sh ``` ### 4. **使用 `--entrypoint` 覆盖入口点** 如果在运行容器时指定了 `--entrypoint` 参数,但未正确设置,也可能导致错误。 - **解决方法**:确保 `--entrypoint` 指向的脚本存在且具有可执行权限。例如: ```bash docker run --entrypoint "/usr/local/bin/docker-entrypoint.sh" -p 3317:3306 --name mysql-slaver-01 -v /mydata/mysql/slaver1/conf:/etc/mysql/conf.d -v /mydata/mysql/slaver1/logs:/var/log/mysql -v /mydata/mysql/slaver1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --privileged=true --restart=always --network mysql-cluster -d mysql:8.0.32 ``` ### 5. **检查 Docker 日志** 如果以上方法都无法解决问题,可以通过查看容器的日志来获取更多线索。 - **查看日志**: ```bash docker logs mysql-slaver-01 ``` 通过日志可以更详细地了解错误发生的具体原因。 ### 总结 该错误通常与镜像架构、入口点脚本权限或文件格式有关。通过确保镜像与系统架构兼容、脚本具有可执行权限以及使用正确的换行符格式,可以有效解决该问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luffy5459

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值