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

Golang+React+MySQL项目Docker Compose启动报错:二进制未找到及数据库未初始化

问题修复方案

错误1:Go服务二进制文件未找到(nd: not found)

原因分析

  1. Dockerfile指令错误:nd-back的Dockerfile中存在两个CMD指令,Docker仅执行最后一个;且前一个CMD chown=chevi nd是无效写法。核心问题是本地目录挂载覆盖了容器内构建的二进制文件——你通过docker-compose.yml将本地./nd-back挂载到容器/app/nd-back,本地开发目录没有构建后的nd文件,导致容器启动时找不到。
  2. 启动路径不明确:启动命令未指定当前工作目录,可能引发路径解析问题。

修复步骤

修改nd-back/Dockerfile

删除无效指令,明确启动路径:

FROM golang:1.22-alpine3.19
RUN addgroup chevi && adduser -S -G chevi chevi
USER chevi
WORKDIR /app/nd-back/
COPY go.mod go.sum ./
RUN go mod download
COPY --chown=chevi . .
RUN CGO_ENABLED=0 GOOS=linux go build -o nd
EXPOSE 8000
CMD ["./nd"]

修改docker-compose.yml中back服务的卷配置

避免全目录挂载覆盖构建产物,若需本地热重载,仅挂载源码子目录(如cmd、internal),或暂时注释卷挂载:

back:
  build: ./nd-back
  ports:
    - 8000:8000
  environment:
    BBDD_URL: mysql://db/vdb
    MYSQL_USER: root
    MYSQL_PASSWORD: xxxxxxxxxx
    MYSQL_DATABASE: xxxxxxxxxx
  # 注释全目录挂载,或改为挂载源码子目录
  # volumes:
  #   - ./nd-back/cmd:/app/nd-back/cmd
  #   - ./nd-back/internal:/app/nd-back/internal
  depends_on:
    - db

错误2:MySQL数据库未初始化(Database is uninitialized and password option is not specified)

原因分析

MySQL镜像的初始化环境变量(如MYSQL_ROOT_PASSWORD)被错误配置在back服务中,MySQL入口脚本仅读取自身服务的环境变量,导致无法完成初始化。同时,数据卷挂载路径不符合MySQL镜像默认配置,会造成数据无法持久化。

修复步骤

修改docker-compose.yml的db服务配置:

db:
  image: mysql:8.3.0
  ports:
    - 3306:3306
  environment:
    MYSQL_ROOT_PASSWORD: yes
    MYSQL_USER: root
    MYSQL_PASSWORD: xxxxxxxxxx
    MYSQL_DATABASE: xxxxxxxxxx
  volumes:
    - vdb:/var/lib/mysql

验证修复

执行以下命令重新构建启动服务:

docker-compose down
docker-compose build
docker-compose up

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 02:07:33