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

Docker部署NodeJS+MySQL应用启动异常问题求助

解决Docker化NodeJS+MySQL应用的启动问题

看起来你遇到了两个典型的Docker容器启动问题,我来逐个帮你分析解决:

问题1:MySQL容器卡在「Starting MySQL 5.7.22-1.1.5」

这个情况通常和数据残留、权限或者初始化脚本有关,试试下面的步骤:

  • 清理残留的Docker数据卷
    之前运行的MySQL容器可能留下了损坏的锁文件或异常数据,彻底清理卷能解决大部分卡住问题:

    docker-compose down -v
    

    这个命令会停止并删除容器,同时删除关联的匿名/命名数据卷,确保下次启动是全新的干净环境。

  • 检查init.sql的语法和逻辑
    如果初始化脚本里有错误(比如未闭合的SQL语句、创建用户时的权限语法错误),会导致MySQL启动时卡住。可以先在本地MySQL环境测试init.sql,确保能正常执行且无报错。

  • 修复数据目录权限
    MySQL容器默认用mysql用户(UID 999)运行,如果宿主机挂载的目录权限不对,会导致MySQL无法读写数据。可以在docker-compose.yaml里给MySQL服务添加用户配置,或者提前在宿主机设置目录权限:

    services:
      mysql:
        # ...其他配置
        user: "999:999" # 对应mysql用户的UID和GID
    

    或者在宿主机执行:

    sudo chown -R 999:999 ./mysql-data
    

问题2:myapp容器提示「standard_init_linux.go:190: exec user process caused "no such file or directory"」

这个错误不一定是until循环卡住,更可能是wait-for-db.sh脚本本身的问题,先排查以下几点:

1. 脚本的Shebang和容器环境不匹配

如果你的wait-for-db.sh开头是#!/bin/bash,但你的NodeJS基础镜像(比如alpine轻量镜像)里没有bash,只有sh,就会报这个错。把Shebang改成:

#!/bin/sh

2. 脚本的换行符是Windows格式(CRLF)

如果是在Windows环境编写的脚本,换行符是CRLF,Linux容器无法识别,会导致执行错误。可以用文本编辑器(比如VS Code)把换行符改成LF,或者在Dockerfile里添加转换命令:

RUN sed -i 's/\r$//' wait-for-db.sh

3. 脚本没有执行权限

确保在Dockerfile里给脚本添加执行权限,否则容器无法执行它:

COPY wait-for-db.sh /usr/src/app/
RUN chmod +x wait-for-db.sh

4. 排查wait-for-db的until循环逻辑

如果以上都解决了,还是卡在循环,那就要检查MySQL的连接参数:

  • 确保wait-for-db.sh里的数据库主机是docker-compose.yaml中MySQL服务的名称(比如mysql),而不是localhost或127.0.0.1——容器间通信要用服务名,不是本地回环地址。
  • 确认MySQL服务的内部端口是3306(默认是),不要用宿主机暴露的端口(虽然你暴露了3306,但容器内部还是用3306直接连接)。
  • 在循环里添加日志输出,方便调试到底卡在哪一步:
    until mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" -p"$DB_PASSWORD" -e "SELECT 1"; do
        echo "$(date) - Waiting for MySQL to be ready..."
        sleep 2
    done
    

最后,建议先单独启动MySQL容器,确认它能正常启动:

docker-compose up mysql

等MySQL日志里出现「ready for connections」的提示后,再启动myapp容器,这样能快速定位是MySQL的问题还是myapp的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:46:15