我是docker的新手。我已经扩展了PostgreSQL镜像并能够在运行镜像时创建新的DB实例。我需要从shell脚本中创建该DB中的表,该脚本将执行.sql文件。在运行PostgreSQL镜像时,它会显示服务器未启动?如何才能在docker容器中仅在PostgreSQL服务器启动后执行脚本?
Dockerfile:
FROM postgres:9.3
ENV POSTGRES_USER docker
ENV POSTGRES_PASSWORD docker
ENV POSTGRES_DB docker
RUN apt-get update && apt-get install -y postgresql-9.3 postgresql-client-9.3 postgresql-contrib-9.3
ADD initialize.sh /home/MM0312/docker-entrypoint-initdb.d/initialize.sh
CMD ["/home/MM0312/docker-entrypoint-initdb.d/initialize.sh"]
初始化脚本
#!/bin/bash
set -e
set -x
echo "******PostgreSQL initialisation******"
gosu docker psql -h localhost -p 5432 -U docker -d $docker -a -f createDatabase.sql
创建 createDatabase.sql 文件
CREATE TABLE web_origins (
client_id character varying(36) NOT NULL,
value character varying(255)
);
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
,如此处所述:https://gist.github.com/onjin/2dd3cc52ef79069de1faa2dfd456c945 - lvthillopostgres: image: onjin/alpine-postgres:9.5 volumes: - ./testdata/db.sql:/docker-entrypoint-initdb.d/db.sql restart: unless-stopped ports: - "5432:5432"
,但仍未执行。 - kamal-d
标志,你可以将其删除以查找更多的调试日志。在我的情况下,我发现第四种情况"$0: ignoring $f"
被回显,然后我就能从那里追踪到根本原因了。 - akki