基于Docker的Postgres documentation,我可以在*.sql
中创建任何/docker-entrypoint-initdb.d
文件并自动运行。
我的init.sql
包含CREATE DATABASE ronda;
在我的docker-compose.yaml
中,我有
web:
restart: always
build: ./web
expose:
- "8000"
links:
- postgres:postgres
volumes:
- /usr/src/app/static
env_file: .env
command: /usr/local/bin/gunicorn ronda.wsgi:application -w 2 -b :8000
nginx:
restart: always
build: ./nginx/
ports:
- "80:80"
volumes:
- /www/static
volumes_from:
- web
links:
- web:web
postgres:
restart: always
build: ./postgres/
volumes_from:
- data
ports:
- "5432:5432"
data:
restart: always
build: ./postgres/
volumes:
- /var/lib/postgresql
command: "true"
和我的postgres Dockerfile,
FROM library/postgres
RUN mkdir -p /docker-entrypoint-initdb.d
COPY init.sql /docker-entrypoint-initdb.d/
正常运行docker-compose build
和docker-compose up
,但未创建数据库ronda
。
答案 0 :(得分:2)
如果您的初始化要求只是创建POSTGRES_DB
架构,那么您可以使用documentation中描述的postgres:
restart: always
build: ./postgres/
volumes_from:
- data
ports:
- "5432:5432"
environment:
POSTGRES_DB: ronda
环境变量。
postgres服务的 docker-compose.yml 文件位将为:
restart: always
另外,请不要将data
用于true
容器,因为此容器不运行任何服务(仅true
命令)。这样做基本上告诉Docker在无限循环中运行<?php defined('BASEPATH') OR exit('Not your cup of tea');
class Search extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->helper('inflector');
}
public function song($song)
{
$song = underscore($this->input->post('song'));//name of field in view which becomes sheila_on_7
//use variable for DB search or what ever you need
//$data['song'] = $this->Song_m->get('title', $this->input->post('song'));
//$this->load->view('search', $data);
}
}
命令。
答案 1 :(得分:0)
这就是我在项目中使用 postgres 并预加载数据库的方法。
档案:docker-compose.yml
db:
container_name: db_service
build:
context: .
dockerfile: ./Dockerfile.postgres
ports:
- "5432:5432"
volumes:
- /var/lib/postgresql/data/
此Dockerfile
加载名为pg_dump.backup
(二进制转储)或psql_dump.sql
(纯文本转储)的文件(如果存在于项目的根文件夹中)。
文件: Dockerfile.postgres
FROM postgres:9.6-alpine
ENV POSTGRES_DB DatabaseName
COPY pg_dump.backup .
COPY pg_dump.sql .
RUN [[ -e "pg_dump.backup" ]] && pg_restore pg_dump.backup > pg_dump.sql
# Preload database on init
RUN [[ -e "pg_dump.sql" ]] && cp pg_dump.sql /docker-entrypoint-initdb.d/
如果需要重试加载转储,可以使用以下命令删除当前数据库:
docker-compose rm db
然后您可以运行docker-compose up
重试加载数据库。
答案 2 :(得分:0)
postgres 11也有同样的问题。
一些对我有帮助的要点:
line 17, in <module>
c.execute("CREATE TABLE IF NOT EXISTS orders (ID INT, DATE TEXT, CHECK TEXT, AMOUNT REAL,DESC TEXT)")
sqlite3.OperationalError: near "TEXT": syntax error
docker-compose rm
docker-compose build
在将步骤docker-compose up
添加到其工作混合物中之后,最终。