为什么运行 docker-compose up 时没有执行这个 initdb 脚本?

问题描述 投票:0回答:1

我有一个 Docker 环境,但无法执行 initdb 脚本。我正在使用 PostgreSQL。

所以我有这个 Dockerfile:

FROM golang:latest

WORKDIR /app

COPY go.mod .
COPY go.sum .

RUN go mod download

COPY . .

RUN go build -o rinha ./

CMD ["./rinha"]

我的docker-compose是这样写的:

version: '3'

services:
  rinha:
    build:
      context: .
      dockerfile: Dockerfile
    image: rinha
    restart: always
    ports:
      - "8080:8080"
    deploy:
      mode: replicated
      replicas: 1
    environment:
      DSN: "host=postgres port=5432 user=postgres password=password dbname=rinha sslmode=disable timezone=UTC connect_timeout=5"


  postgres:
    image: 'postgres:14.2'
    ports:
      - "5432:5432"
    restart: always
    deploy:
      mode: replicated
      replicas: 1
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: rinha
    volumes:
      - ./data/init.sql:/docker-entrypoint-initdb.d/init.sql
      - ./db-data/postgres/:/var/lib/postgresql/data/
    healthcheck:
      test: pg_isready -U "$$POSTGRES_USER" -d "$$POSTGRES_DB"
      interval: 10s
      timeout: 2s
      retries: 10

我已经检查过,我的 initdb 位于正确的路径中,并且没有任何语法错误。

但是每次我运行 docker-compose up --buil -d 或类似的命令时,脚本都不会执行。

有人可以帮助我吗?

PS:我已经尝试排除本地数据库数据,但这不会改变任何东西。

sql postgresql docker docker-compose dockerfile
1个回答
0
投票

您能在 docker compose 日志中看到任何错误吗?

docker compose logs postgres

或者没有显示任何错误?

通常认为如果执行入口点脚本,您会在日志中看到这样的行

postgres-1  | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql

但是如果你没有看到这样的行,我认为这意味着entrypoint.sh没有被触发,在这种情况下你可能想要排除卷目录并再次重新运行docker compose up,但正如你所说已经这样做了,但没有成功(所以不太确定)

© www.soinside.com 2019 - 2024. All rights reserved.