В скрипта docker-entrypoint.sh на официалното изображение на докер на postgres е написано:
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
Така че всеки .sql файл, който искате да изпълните във вашия докер образ, може просто да бъде поставен в тази папка. Така че моят докер файл изглежда така
FROM postgres:9.3
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
ADD CreateDB.sql /docker-entrypoint-initdb.d/
И съдържанието на моя CreateDB.sql:
CREATE TABLE web_origins (
client_id character varying(36) NOT NULL,
value character varying(255)
);
Така че просто стартирам своя контейнер с:
docker run -d my-postgres
За да проверите:
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)
Можете да намерите подробности за mysql тук в този блог .