質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

8819閲覧

dockerでpostgreSQLのコンテナ作成時にテーブルやデータも入れたい

moshi

総合スコア90

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2019/01/23 02:46

前提・実現したいこと

dockerでpostgresのコンテナを作成したときにDBやテーブルの作成や、初期データの挿入などをしたいです。

試したこと

Dockerでpostgres構築 初期データも流しますを参考に以下のファイルを作成して

docker-compose up -d --build

でコンテナを作成しました。

該当のソースコード

ディレクトリ構成

|-docker-compose.yml |-docker |-db |-init |-1_createdb.sql |-2_createtable.sh |-web

docker-compose.yml

version: "3" services: web: build: $PWD/docker/web # Specifying the file to build image: webapi # Image name container_name: web-container # Container name ports: # Port on the left to access,right side is the port inside the container - "3000:3000" environment: # Container internal environment variable - "DATABASE_HOST=db" - "DATABASE_PORT=5432" - "DATABASE_USER=postgres" - "DATABASE_PASSWORD=mysecretpassword1234" - "PGPASSWORD=mysecretpassword1234" - "DATABASE_NAME=testdb" links: - db stdin_open: true tty: true entrypoint: ash /app/run.sh java -jar /app/test.jar # command: ash # for debug db: image: postgres:10.6-alpine # Base image file container_name: db-container # Container name ports: # Port on the left to access,right side is the port inside the container - "5432:5432" environment: # Container internal environment variable - "POSTGRES_USER=postgres" - "POSTGRES_PASSWORD=mysecretpassword1234" - "POSTGRES_DB=testdb" volumes: - $PWD/docker/db/init:/docker-entrypoint-initdb.d # Initial data create #- dbdata:/var/lib/postgresql/data # mount postgresql volume volumes: dbdata: driver_opts: type: none device: $PWD/.dbdata # Create volume for postgresql o: bind

1_createdb.sql

create database testdb

2_createtable.sh

psql - U postgres create table public.testtable( user text not null, pw text not null ) with ( OIDS = FALSE );

発生している問題・エラーメッセージ

上記でコンテナを立ち上げてもtestdbというDBは作成されるのですが、testtableテーブルが作成されません。
なぜでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ぱっと見て気づいたところは

text

1 entrypoint: ash /app/run.sh java -jar /app/test.jar ← ashじゃなくてbashかと

さらにdocker-compose entrypointはでの記述では1コマンドしか動かせないと思うので

run.shの中身が分からないので勘ですが
run.shファイルの末尾にjava -jar /app/test.jarを記述すれば良いかもしれません

投稿2019/01/23 05:41

mosapride

総合スコア1480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

公式のサンプル(How to extend this imageの部分)を確認してみてください。
https://hub.docker.com/_/postgres

#!/bin/bash set -e psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL CREATE USER docker; CREATE DATABASE docker; GRANT ALL PRIVILEGES ON DATABASE docker TO docker; EOSQL

投稿2019/01/23 03:12

xenbeat

総合スコア4258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

moshi

2019/01/24 02:14

DBコンテナのログを確認してみたところ psql:/docker-entrypoint-initdb.d/1_createdb.sql:13: ERROR: syntax error at or near "psql" というエラーが出ていてPSQLコマンドが使えないように見えます。。。
xenbeat

2019/01/24 06:34

SQL(1_createdb.sql)にpsqlを含めてませんか? psqlはSQL文ではないので公式サンプルのようにシェルスクリプトに含めてください。 公式サンプルを既に紹介しています。それと照らし合わせてどこかおかしい部分はないか等、ご自身で試行錯誤した上でご相談ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問