无法链接到正在运行的Postgres数据库Docker容器并运行DDL命令

时间:2020-09-08 15:25:38

标签: postgresql docker

我试图在docker容器中运行postgres并通过链接到正在运行的postgress容器创建用户和数据库。创建用户后,我想在运行Pact Brocker实例时提供这些详细信息。但是,当我运行shell脚本时,连接到postgres容器并运行ddl查询时出现错误。 以下是脚本和错误的详细信息。

脚本

root = minidom.Document() 
 
xml = root.createElement('Datasource')  
root.appendChild(xml) 

productChild = root.createElement('connection')
productChild.setAttribute('formatted-name', 'Federated') 
productChild.setAttribute('inline', 'true') 
xml.appendChild(productChild)

# named-connections indent
childOfProduct = root.createElement('named-connections')
productChild.appendChild(childOfProduct)

# named-connection indent
productChild1 = root.createElement('named-connection')
productChild1.setAttribute('caption', 'Sample - Superstore')
productChild1.setAttribute('name', 'excel.1ew9u4t0tggb9315darmm0nfz2kb')
childOfProduct.appendChild(productChild1)

# connection indent
productChild2 = root.createElement('connection')
productChild2.setAttribute('class', 'excel')
productChild2.setAttribute('driver', '')
productChild2.setAttribute('header', 'yes')
productChild2.setAttribute('imex', '1')
productChild2.setAttribute('password', '')
productChild2.setAttribute('server', '')
productChild1.appendChild(productChild2)


错误:

docker run --name pactbroker-db -e POSTGRES_PASSWORD=XXXXX -e POSTGRES_USER=admin -v ~/pact/data:/var/data -d postgres


docker run -it --link pactbroker-db:postgres --rm postgres sh -c 'export PGPASSWORD=XXXXX; exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U admin'

CREATE USER pactbrokeruser WITH PASSWORD 'YYYYY';
CREATE DATABASE pactbroker WITH OWNER pactbrokeruser;
GRANT ALL PRIVILEGES ON DATABASE pactbroker TO pactbrokeruser;

\q

docker run --name pactbroker --link pactbroker-db:postgres -e PACT_BROKER_DATABASE_USERNAME=pactbrokeruser -e PACT_BROKER_DATABASE_PASSWORD=YYYYY -e PACT_BROKER_DATABASE_HOST=postgres -e PACT_BROKER_DATABASE_NAME=pactbroker -d -p 80:80 dius/pact-broker

我是docker的新手,不确定我要去哪里哪里。

请帮助。

1 个答案:

答案 0 :(得分:1)

对于数据库初始化,请使用正式的postgres docker映像功能,该功能运行在/docker-entrypoint-initdb.d/文件夹中找到的.sql脚本

因此,请在主机~/pact/initscriptdir上创建初始化脚本,然后将其安装到从postrgres开始的目录中。

docker run --name pactbroker-db -e POSTGRES_PASSWORD=XXXXX -e POSTGRES_USER=admin -v ~/pact/initscriptdir:/docker-entrypoint-initdb.d -d postgres