Trong tập lệnh docker-entrypoint.sh của hình ảnh docker chính thức trong tổng số postgres được viết:
psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" )
echo
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${psql[@]}" < "$f"; echo ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done
Vì vậy, mọi tệp .sql bạn muốn thực thi bên trong hình ảnh docker của bạn chỉ có thể được đặt bên trong thư mục đó. Do đó, tệp dockerfile của tôi trông giống như
FROM postgres:9.3
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
ADD CreateDB.sql /docker-entrypoint-initdb.d/
Và nội dung của CreateDB.sql của tôi:
CREATE TABLE web_origins (
client_id character varying(36) NOT NULL,
value character varying(255)
);
Vì vậy, tôi chỉ bắt đầu vùng chứa của mình với:
docker run -d my-postgres
Để kiểm tra:
docker exec -it 6250aee43d12 bash
[email protected]:/# psql -h localhost -p 5432 -U docker -d docker
psql (9.3.13)
Type "help" for help.
docker=# \c
You are now connected to database "docker" as user "docker".
docker=# \dt
List of relations
Schema | Name | Type | Owner
--------+-------------+-------+--------
public | web_origins | table | docker
(1 row)
Bạn có thể tìm thấy chi tiết về mysql tại đây trong blog này .