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

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

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

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Docker

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

Q&A

解決済

1回答

2367閲覧

コンテナを起動と同時にSQLを流したい(テーブル作成)

退会済みユーザー

退会済みユーザー

総合スコア0

docker-compose

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

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Docker

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

0グッド

0クリップ

投稿2021/11/29 14:10

前提・実現したいこと

コンテナを起動した際、create文を流したいのですが、上手くいきません。
コンテナちゃんと起動しています。
ご教授頂けますと幸いです。

該当のソースコード

version: '3' services: db: build: context: ./sql dockerfile: ./Dockerfile.pg container_name: postgresql restart: always environment: POSTGRES_USER: root POSTGRES_PASSWORD: admin PGPASSWORD: admin POSTGRES_DB: pg_tables TZ: "Asia/Tokyo" ports: - 5432:5432 volumes: - ./pg_data:/var/lib/postgresql/data - ./sql/init:/docker-entrypoint-initdb.d

./sql/init配下の1_create.sql

create table if not exists image ( id bigserial primary key, content_type varchar(32) not null, created_at timestamp not null default current_timestamp, status smallint not null, bin bytea default null );

コンテナ内のログ

The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "ja_JP.UTF-8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "simple". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/data ... ok creating subdirectories ... ok selecting dynamic shared memory implementation ... posix selecting default max_connections ... 100 selecting default shared_buffers ... 128MB selecting default time zone ... Asia/Tokyo creating configuration files ... ok running bootstrap script ... ok performing post-bootstrap initialization ... ok initdb: could not find suitable text search configuration for locale "ja_JP.UTF-8" sh: locale: not found 2021-11-29 22:58:50.010 JST [32] WARNING: no usable system locales were found syncing data to disk ... ok Success. You can now start the database server using: pg_ctl -D /var/lib/postgresql/data -l logfile start initdb: warning: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb. waiting for server to start....2021-11-29 22:58:56.463 JST [38] LOG: starting PostgreSQL 14.1 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit 2021-11-29 22:58:56.467 JST [38] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2021-11-29 22:58:56.491 JST [39] LOG: database system was shut down at 2021-11-29 22:58:53 JST 2021-11-29 22:58:56.510 JST [38] LOG: database system is ready to accept connections done server started CREATE DATABASE /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/1_create.sql CREATE TABLE waiting for server to shut down...2021-11-29 22:58:58.777 JST [38] LOG: received fast shutdown request .2021-11-29 22:58:58.781 JST [38] LOG: aborting any active transactions 2021-11-29 22:58:58.782 JST [38] LOG: background worker "logical replication launcher" (PID 45) exited with exit code 1 2021-11-29 22:58:58.791 JST [40] LOG: shutting down 2021-11-29 22:58:58.957 JST [38] LOG: database system is shut down done server stopped PostgreSQL init process complete; ready for start up. 2021-11-29 22:58:59.017 JST [1] LOG: starting PostgreSQL 14.1 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit 2021-11-29 22:58:59.017 JST [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 2021-11-29 22:58:59.017 JST [1] LOG: listening on IPv6 address "::", port 5432 2021-11-29 22:58:59.024 JST [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 2021-11-29 22:58:59.046 JST [54] LOG: database system was shut down at 2021-11-29 22:58:58 JST 2021-11-29 22:58:59.069 JST [1] LOG: database system is ready to accept connections

参考記事
https://qiita.com/chocomintkusoyaro/items/092bc8dd9ddf3a191261

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

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

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

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

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

kiino

2021/12/02 14:48

sql ファイルによる Database 作成がせいこうしてそうにみえます。 > /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/1_create.sql > CREATE TABLE 「うまくいきません」とおっしゃってますが、どのようにうまくいかないのでしょうか。 現状の状況や試したことをもう少し教えてもらうことは可能でしょうか
退会済みユーザー

退会済みユーザー

2021/12/06 13:17

コンテナの中に入り、テーブルを確認しましたが、テーブルが作成されていないようでした。
kiino

2021/12/07 00:19

確認方法についてありがとうございます。 その際の手順やつかったコマンド・ツールについても教えていただいてもよいでしょうか。 私の環境で sql ファイルの内容をコピーして実行・確認しましたが、pg_tables の下に image テーブルは生成されていました。 # psql -h localhost -U root pg_tables psql (11.14 (Debian 11.14-1.pgdg90+1)) Type "help" for help. pg_tables=# select * from image; id | content_type | created_at | status | bin ----+--------------+------------+--------+----- (0 rows)
guest

回答1

0

ベストアンサー

DockerfileのENTRYPOINTで可能です。ですが、起動には時間がかかるので、起動が終わるまでループしてチェックしないといけないです。さらに、このテーブル作成のスクリプトは毎回実行するので、作成済みの場合エラーが出ると思います。
解決策は、データベースのデータはコンテナの中ではなく、外に保存することだと思います。

投稿2021/11/30 00:32

skys215

総合スコア910

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問