我试图在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的新手,不确定我要去哪里哪里。
请帮助。
答案 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