【发布时间】: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服务还没准备好使用?
目前,我的最终目标就像在终端中执行以下命令:
docker run -d -p 5432:5432 -v /srv/docker_data/db0:/var/lib/postgresql/data/ -e POSTGRES_PASSWORD=postgres --name=db0 --restart=always postgres:11docker cp db0.sql db0:/srv/docker exec -it db0 bashsu postgrespsql -U postgres -p 5432 -h localhost -f /srv/db0.sql
完成这些后,我可以使用 python_team 数据库、其中的测验模式和示例表以及其中的记录连接到它。
如何解决?
【问题讨论】:
标签: postgresql docker dockerfile