【问题标题】:docker build error: psql: could not connect to server: Connection refuseddocker build 错误:psql:无法连接到服务器:连接被拒绝
【发布时间】:2019-12-25 07:42:07
【问题描述】:

我的目标是创建一个带有默认数据的 docker 镜像(postgres)。

所以我的计划是写一个dockerfile,使用基础镜像postgres:11,然后在里面复制并运行db0.sql

SQL 脚本:db0.sql

CREATE TABLE "quiz"."example" (
  "name" varchar(255),
  "age" int4,
  "phone" varchar(255),
  "blood_group" varchar(255),
  "height" int4
);

INSERT INTO "quiz"."example" VALUES ('Tony', NULL, NULL, 'O', 180);
ALTER TABLE "quiz"."example" ADD CONSTRAINT "name" UNIQUE ("name");

dockerfile:db0.dockerfile

FROM postgres:11
COPY db0.sql /srv/
RUN /etc/init.d/postgresql start
RUN su postgres
EXPOSE 5432
RUN psql -U postgres -p 5432 -h localhost -f /srv/db0.sql

但是当我运行docker build -t db0 -f db0.dockerfile . 时,它显示了以下错误:

Sending build context to Docker daemon  4.096kB
Step 1/6 : FROM postgres:11
 ---> 55ff21ffc6d1
Step 2/6 : COPY db0.sql /srv/
 ---> Using cache
 ---> 5623b274bfef
Step 3/6 : RUN /etc/init.d/postgresql start
 ---> Using cache
 ---> 838cd16f9545
Step 4/6 : RUN su postgres
 ---> Using cache
 ---> 2c65f67991f0
Step 5/6 : EXPOSE 5432
 ---> Using cache
 ---> a7921ebdf180
Step 6/6 : RUN psql -U postgres -p 5432 -h localhost -f /srv/db0.sql
 ---> Running in ddaced269112
psql: could not connect to server: Connection refused
        Is the server running on host "localhost" (127.0.0.1) and accepting
        TCP/IP connections on port 5432?
could not connect to server: Network is unreachable
        Is the server running on host "localhost" (::1) and accepting
        TCP/IP connections on port 5432?
The command '/bin/sh -c psql -U postgres -p 5432 -h localhost -f /srv/db0.sql' returned a non-zero code: 2

我不擅长 docker,但据我所知,错误似乎告诉我

当我尝试运行psql命令,但此时postgres服务还没准备好使用?


目前,我的最终目标就像在终端中执行以下命令:

  1. docker run -d -p 5432:5432 -v /srv/docker_data/db0:/var/lib/postgresql/data/ -e POSTGRES_PASSWORD=postgres --name=db0 --restart=always postgres:11
  2. docker cp db0.sql db0:/srv/
  3. docker exec -it db0 bash
  4. su postgres
  5. psql -U postgres -p 5432 -h localhost -f /srv/db0.sql

完成这些后,我可以使用 python_team 数据库、其中的测验模式和示例表以及其中的记录连接到它。

如何解决?

【问题讨论】:

    标签: postgresql docker dockerfile


    【解决方案1】:

    我找到了解决办法,关注this

    dockerfile:db0.dockerfile

    FROM postgres:11
    
    ENV POSTGRES_PASSWORD postgres
    COPY db0.sql /docker-entrypoint-initdb.d/
    

    official postgres image 将运行/docker-entrypoint-initdb.d/中的.sql脚本

    然后运行docker run -d -p 5432:5432 -v /srv/docker_data/db0:/var/lib/postgresql/data/ -e POSTGRES_PASSWORD=postgres --name=db0 db0

    【讨论】:

      猜你喜欢
      • 2013-05-19
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-25
      • 2020-12-09
      • 1970-01-01
      相关资源
      最近更新 更多