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

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

解決済

2回答

3081閲覧

Docker コンテナ構築時テーブル(Postgres)が作成できない

退会済みユーザー

退会済みユーザー

総合スコア0

docker-compose

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

PostgreSQL

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

Docker

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

0グッド

0クリップ

投稿2020/06/24 09:49

編集2020/06/24 09:51

前提・実現したいこと

Docker初心者です。
Dockerでコンテナ構築時、DBとテーブルを作成したいのですがテーブルが作成できません。
そもそも1_createTable.sqlのクエリがちゃんと呼ばれているのかも微妙です。。
問題解決のアプローチも方法もわからず悩んでいます。。ご教授お願いいたします。

作業ディレクトリ

docker-compose.yml Dockerfile docker ┗db  ┗init  ┗1_createTable.sql

docker-compose.yml

version: '3' services: Core: build: ./ image: aspnetapp:Core container_name: sdp ports: - 1991:80 environment: - ConnString postgres: container_name: my-postgres image: postgres:11 ports: - "5432:5432" environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres - PGPASSWORD=postgres - POSTGRES_DB=sdp - DATABASE_HOST=localhost volumes: - $PWD/docker/db/init:/docker-entrypoint-initdb.d

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

コンテナ構築時、DBは作成されているがテーブルが構築されていない。

試したこと

1_createTable.sqlで発行するSQL自体はローカルで実行でき、構文自体にエラーはないと思います。

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

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

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

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

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

guest

回答2

0

以前他の質問に回答したのと同じかと思いますので、こちらを参考にお試しください
https://teratail.com/questions/271536

投稿2020/06/24 13:05

comefigo

総合スコア1051

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

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

退会済みユーザー

退会済みユーザー

2020/06/24 15:17

回答ありがとうございます。 ボリューム消してみましたがダメでした(謎の乱数みたいボリュームしかなかった) そもそも1_createTable.sqlのクエリ自体が呼べてなさそうなんですよね。 意図的に1_createTable.sqlの中身をエラー出るような構文にしたのですがエラーになりませんでした・・
comefigo

2020/06/25 00:08

失礼しました。 ボリュームの削除ではなく、今回のケースは$PWD/docker/db/initフォルダを削除しなければなりません。
退会済みユーザー

退会済みユーザー

2020/06/25 10:51

initフォルダを削除して$PWD/docker/db直下にsqlファイルを置けばよいでしょうか? docker-compose.yml volumes: - $PWD/docker/db:/docker-entrypoint-initdb.d 一応上記でやってみたものの無理でした。
comefigo

2020/06/25 11:25

失礼しました。データ領域をマウントしているのかと勘違いしました。 /docker-entrypoint-initdb.dにはローカルのSQLのフォルダをマウントするので問題ありません。 データ領域を永続化していないようなので、docker-compose downしてからupしても同じでしょうか?
退会済みユーザー

退会済みユーザー

2020/06/25 13:30 編集

すいません、ダメでした。。。。 1_createTable.sql自体が読み込めていない可能性が非常に高いんですよね。。。 うーん こまりましたww docker-entrypoint-initdb.d これはフォルダ名になるのかな。。。ここかな
comefigo

2020/06/25 13:38

考えられる原因は、すでにデータがロードされているとsqlが実行されない仕組みになっている。もう一つが自動ロードに適していないsqlになっているかですね。 downしてからupでもダメだったということでしたら、以下を試していただけますでしょうか? init配下のsqlの代わりに以下のようなshellスクリプトを配置してからdown→upしてみてください hoge.sh ←ファイル名は適当でOK --------ここから--------- #!/bin/bash psql -U postgres -d template1 << EOF 1_createTable.sql内のsql文をこのEOFの中のDB作成とテーブル作成文を張り付けてください EOF --------ここまで---------
退会済みユーザー

退会済みユーザー

2020/06/25 14:55

ダメでした・・・・・すいませんw やっぱりクエリが実行されてないですね。。。。
comefigo

2020/06/25 15:25

実行されているかどうかは何で判断していますか? docker logs my-postgresで確認していますか?
comefigo

2020/06/25 15:26

上記のシェルスクリプトにecho "load sql"を追加して、再度実行してみてください。それでdocker logsにその内容が表示されているかをご確認ください。
退会済みユーザー

退会済みユーザー

2020/06/26 01:39

すいません、試しましたが表示されいませんでした。。 sqlを意図的にエラーでるような構文にしたりしてるのですがエラーも表示されないので やはり呼ばれていないですね。。。。
comefigo

2020/06/26 02:05

同じコードで試したところ、$PWDが不要でしたね。 docker-compose.ymlで環境変数を扱えないので、ホストのパスが正しく認識されず、結果的にマウントできていなかっただけですね。 なので相対パス(.//docker/db/init)で指定すればOKです。 コンテナが起動したら、コンテナにログインし、/docker-entrypoint-initdb.dを確認してみてください。$PWDありとなしでファイルがマウントされているかどうかを確認できます。
退会済みユーザー

退会済みユーザー

2020/06/26 02:48

んーできないですねww /docker/db/init:/ initのコロンは不要ですか?? docker-compose.ymlとdockerフォルダは同階層なので 「./docker/db/init」ではなく「.//docker/db/init」なのは意図的でしょうか?? sql実行はシェルスクリプトでやられましたか??
comefigo

2020/06/26 05:59

> /docker/db/init:/ > initのコロンは不要ですか?? 必要です。 なので「./docker/db/init:/docker-entrypoint-initdb.d」になります。 > sql実行はシェルスクリプトでやられましたか?? Shellスクリプトですね。
退会済みユーザー

退会済みユーザー

2020/06/26 07:29 編集

できない・・・w hoge.sh ``` #!/bin/bash psql -U postgres -d template1 << EOF -- Table: public.test -- DROP TABLE public.test; CREATE TABLE public.test ( id integer NOT NULL, name character(1) COLLATE pg_catalog."default" NOT NULL, CONSTRAINT test_pkey PRIMARY KEY (id) ) WITH ( OIDS = FALSE ) TABLESPACE pg_default; ALTER TABLE public.test OWNER to postgres; echo "load sql" EOF ``` ■実行手順 ・docker-compose build ・docker-compose up -d ・docker exec -it コンテナID /bin/bashで中に入る ・psql -U postgres sdpでDBに入る \dtでテーブル確認。Did not find any relations.になる 同様に/docker-entrypoint-initdb.dの中にも何もなし。 なぜだwwwんー
comefigo

2020/06/26 07:37

> 同様に/docker-entrypoint-initdb.dの中にも何もなし。 マウントができていないので、マウント元のパスがただしいことをご確認ください。 docker-compose.ymlのpostgresのvolumes:はどうなっていますか?
退会済みユーザー

退会済みユーザー

2020/06/26 07:46

volumes: - ./docker/db/init:/docker-entrypoint-initdb.d となります。。。
退会済みユーザー

退会済みユーザー

2020/06/26 07:48

実際のディレクトリは \docker\db\init\hoge.sh です。。
comefigo

2020/06/26 08:03

マウント指定も、ディレクトリ構成も問題なさそうですね
comefigo

2020/06/26 08:06

ちなみにhoge.shのファイルの実行権限はどうなっていますか? 試しに777にしてみてください
退会済みユーザー

退会済みユーザー

2020/06/26 08:44

フルコントロール付けましたがダメでした。。。。 んー迷宮ですw
comefigo

2020/06/26 12:15

なぞですね・・・ 同じdocker-compose.yml(coreを除いて)で手元で実行したのですが、問題なくできました。 ちなみに実行環境はMacですか? もしそうでしたら、共有設定はしていますか?
退会済みユーザー

退会済みユーザー

2020/06/26 14:25

いえwindowsです。。 明日もう一度粘ってみます。 すいません、たくさんご教授していただいているのに。。
退会済みユーザー

退会済みユーザー

2020/06/26 14:31

またお手すきの時に軽くで良いので総括みたいなものを書けますでしょうか? それをベストアンサーにさせていただきます。
comefigo

2020/06/26 14:44

そうしたらDockerの共有設定されますか?
退会済みユーザー

退会済みユーザー

2020/06/26 15:04 編集

すいませんちょっと初学者で。。 ホストとdockerコンテナの設定の話でしょうか??
comefigo

2020/06/26 15:25

タスクバーの右下にDockerの「Settings」-「Resources」-「FILE SHARING」でマウントしようとしているフォルダもしくは、ドライブごとを設定していますか?
退会済みユーザー

退会済みユーザー

2020/06/27 02:20

出来ました!!!!! Docker ToolBoxを使用してるのですが、C:\Users直下に置かないとコンテナにマウントできないようです!!!! comefigoさんをベストアンサーにしたいのですがどうすれば良いでしょうか?? 初心者ですいません
comefigo

2020/06/27 02:42

できたのでしたらよかったです。 ToolBoxを使用されてたのですねw 予め動作環境を聞いてればよかったですね… ベストアンサーには拘ってないので、解決にしていただければ良いかと。
退会済みユーザー

退会済みユーザー

2020/06/27 06:12

すいません長々と。。 ありがとうございました、また何かあればご教授お願いいたします。
comefigo

2020/06/28 01:14

はい。 頑張ってください。 余裕があるのでしたら、入門本を片手にDockerを勉強するとより楽しめるかと思います。
guest

0

ベストアンサー

Docker ToolBoxを使用の場合C:\Users直下に置かないとコンテナにマウントできなかった。

投稿2020/06/27 06:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問