En el script docker-entrypoint.sh de la imagen oficial de docker de postgres está escrito:
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
Por lo tanto, cada archivo .sql que desee ejecutar dentro de la imagen de la ventana acoplable se puede colocar dentro de esa carpeta. Entonces mi dockerfile se ve como
FROM postgres:9.3
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
ADD CreateDB.sql /docker-entrypoint-initdb.d/
Y el contenido de mi CreateDB.sql:
CREATE TABLE web_origins (
client_id character varying(36) NOT NULL,
value character varying(255)
);
Así que empiezo mi contenedor con:
docker run -d my-postgres
Para comprobar:
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)
Puede encontrar los detalles de mysql aquí en este blog .