在Docker容器中创建Postgres扩展

7

我正在尝试使用以下Dockerfile在Docker容器中创建一个Postgres实例。

FROM postgres

ENV POSTGRES_DB dspace
ENV POSTGRES_USER dspace
ENV POSTGRES_PASSWORD dspace

COPY init.sql /docker-entrypoint-initdb.d/

这是我的init.sql文件

create extension pgcrpyto

我正在使用Codenvy服务运行这个容器,当它初始化时,我看到了以下错误。
[STDOUT] server started
[STDOUT] Reading package lists...
[STDOUT] Reading package lists...
[STDOUT] Building dependency tree...
[STDOUT] CREATE DATABASE
[STDOUT] 
[STDOUT] CREATE ROLE
[STDOUT] 
[STDOUT] 
[STDOUT] /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sql
[STDOUT] Reading state information...
[STDOUT] 2018-02-15 19:17:34.931 UTC [399] ERROR:  could not open extension control file "/usr/share/postgresql/10/extension/pgcrpyto.control": No such file or directory
[STDOUT] 2018-02-15 19:17:34.931 UTC [399] STATEMENT:  create extension pgcrpyto
[STDERR] psql:/docker-entrypoint-initdb.d/init.sql:1: ERROR:  could not open extension control file "/usr/share/postgresql/10/extension/pgcrpyto.control": No such file or directory

请注意,我基于以下帖子提供解决方案:如何在容器内创建Postgres扩展?
1个回答

10
以下repo有我问题的解决方案。看来我需要提供一个shell脚本来执行SQL。

https://github.com/DSpace-Labs/DSpace-codenvy

Dockerfile
# From https://github.com/DSpace-Labs/dspace-dev-docker/tree/master/postgres
FROM postgres

ENV POSTGRES_DB dspace
ENV POSTGRES_USER dspace
ENV POSTGRES_PASSWORD dspace

COPY install-pgcrypto.sh /docker-entrypoint-initdb.d/

install-pgcrypto.sh

#!/bin/bash
set -e

psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
create extension pgcrypto;
EOSQL

1
你将'pgcrypto'拼错成了'pgcrpyto'。也许仅仅更正这个拼写错误就可以解决问题?一个SQL脚本通常可以像你的shell脚本一样工作。 - Profilüfter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接