Reputation: 604
My goal is to create an docker image(postgres) with its default data.
So my plan is to write a dockerfile, use base image postgres:11
, then copy and run db0.sql
inside it.
SQL Script: 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
But when I run docker build -t db0 -f db0.dockerfile .
, it shows me the following error:
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
I'm not good at docker, but as I know, the error seems to tell me that
When I try to run psql
command, but at this time, the postgres service is not ready for use?
For now, my final goal is just like do the following command in terminal:
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
docker cp db0.sql db0:/srv/
docker exec -it db0 bash
su postgres
psql -U postgres -p 5432 -h localhost -f /srv/db0.sql
After doing these, I can connect into it with a python_team Database, a quiz schema in it with an example table, and a record in it.
How to solve that?
Upvotes: 3
Views: 2513
Reputation: 604
I found the solution, follow this
dockerfile: db0.dockerfile
FROM postgres:11
ENV POSTGRES_PASSWORD postgres
COPY db0.sql /docker-entrypoint-initdb.d/
official postgres image will run .sql scripts found inside /docker-entrypoint-initdb.d/
and then run docker run -d -p 5432:5432 -v /srv/docker_data/db0:/var/lib/postgresql/data/ -e POSTGRES_PASSWORD=postgres --name=db0 db0
Upvotes: 2