我有一个 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:我已经尝试排除本地数据库数据,但这不会改变任何东西。
您能在 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,但正如你所说已经这样做了,但没有成功(所以不太确定)