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

docker-compose运行时docker-entrypoint.sh未生效 应用连接MySQL失败怎么解决

问题排查

你当前配置存在以下几处错误导致等待逻辑未生效、数据库连接失败:

  • Dockerfile未指定docker-entrypoint.sh作为入口脚本,当前CMD直接执行npm start,等待数据库的逻辑完全没有运行
  • 基础镜像node:10默认没有预装dockerize工具,即使执行入口脚本也会报错
  • MySQL服务在docker-compose中定义的名称为db,你配置的MYSQL_HOST=mysql、entrypoint中等待的mysql:3306都和实际服务名不匹配,无法解析到数据库实例;同时报错日志显示Sequelize尝试连接127.0.0.1:3306,说明你的代码中未正确读取MYSQL_HOST环境变量,写死了本地地址
  • MySQL服务的初始化环境变量被注释,没有创建web配置中指定的me用户、mydb数据库,即使网络连通也会鉴权失败
  • docker-entrypoint.sh没有可执行权限,也缺少shell声明头,直接执行会报错

修正后配置

Dockerfile

FROM node:10

# 预装dockerize工具
RUN apt-get update && apt-get install -y wget && \
    wget https://github.com/jwilder/dockerize/releases/download/v0.6.1/dockerize-linux-amd64-v0.6.1.tar.gz && \
    tar -C /usr/local/bin -xzvf dockerize-linux-amd64-v0.6.1.tar.gz && \
    rm dockerize-linux-amd64-v0.6.1.tar.gz

RUN mkdir /app
WORKDIR /app

COPY . /app
RUN npm install

# 给入口脚本赋予执行权限
RUN chmod +x docker-entrypoint.sh

EXPOSE 3000

# 指定入口脚本
ENTRYPOINT ["./docker-entrypoint.sh"]

docker-compose.yaml

version: "3.9"

networks:
  app-tier:
    driver: bridge
services:
  db:
    platform: linux/x86_64
    image: mysql:5.7
    networks:
      - app-tier
    container_name: mysql_container
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root_secure_pass
      MYSQL_DATABASE: mydb
      MYSQL_USER: me
      MYSQL_PASSWORD: 1234
     
  web:
    depends_on:
     - db
    networks:
      - app-tier
    environment:
      - MYSQL_HOST=db
      - MYSQL_USER=me
      - MYSQL_PASSWORD=1234
      - MYSQL_DATABASE=mydb
    build: .

docker-entrypoint.sh

#!/bin/bash
dockerize -wait tcp://db:3306 -timeout 20s

echo "Start server"
npm run start

额外检查项

确认你的Sequelize连接配置读取环境变量作为数据库地址,不要写死本地地址,示例如下:

const sequelize = new Sequelize(
  process.env.MYSQL_DATABASE,
  process.env.MYSQL_USER,
  process.env.MYSQL_PASSWORD,
  {
    host: process.env.MYSQL_HOST,
    dialect: 'mysql',
    port: 3306
  }
)

配置修改完成后执行docker-compose build --no-cache重新构建镜像,再启动服务即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:45:03