私はMariaDBを使用していますが、これはおそらくMySQLにも当てはまると思います。スクリプトで初期ビルド時にドッキングされたmariadbにインポートする
私はMariaDBで動作するプロジェクトを持っています。テーブルの作成、初期データの挿入などのためにデータベースの初期設定がいくつかあります。他の回答に基づいて通常はADD dump.sql /docker-entrypoint-initdb.d
私はdump.sql
を持っていません - 代わりに私はMariaDBに直接接続し、テーブルとデータを作成するpythonスクリプトです。私はちょうどdb
作業を取得したいので、
私はドッキングウィンドウ-compose.yml
version: '3'
services:
db:
build: ./db
ports:
- "3306:3306"
container_name: db
environment:
- MYSQL_ROOT_PASSWORD=root
web:
build: ./web
command: node /app/src/index.js
ports:
- "3000:3000"
links:
- db
「ウェブ」を持っているが、今それほど重要ではありません。
私はDBのために試みられてきたDockerfileは次のとおりです。
# db/Dockerfile
FROM mariadb:10.3.2
RUN apt-get update && apt-get install -y python python-pip python-dev libmariadbclient-dev
RUN pip install requests mysql-python
ADD pricing_import.py /scripts/
RUN ["/bin/sh", "-c", "python /scripts/pricing_import.py"]
しかし、これは様々な理由のために動作しません。私はこれがmysql-python
のインストールに関係していると思います
_mysql.c:2005:41: error: 'MYSQL' has no member named 'reconnect'
if (reconnect != -1) self->connection.reconnect = reconnect;
:私はpip install mysql-python
がコンパイルできない時点までに得ています。
私が穴をあまりにも遠くにする前に、私は./pricing_import.py
スクリプトを取得してからデータベースが起動されると思っていないし、接続しようとしているからデータベースとクエリを実行すると、おそらく動作しません。
私はPythonのインストールはとにかくmariadb
コンテナ上で動作するように得ることができないので、私はまたdb
に依存し、docker-compose build
中に最初のインポートを行うには、ビルドにPythonスクリプトを実行する別のdocker-compose
エントリを作成することを考えていました。
これらのアプローチのどちらかが正しいか、MariaDBに対して初期化スクリプトを実行するより良い方法がありますか?
いいえ。 'docker-compose'をデータベースにロードすることと' make'を使ってこれを別々に行います。 –
はい、問題は、 'docker-compose up'を呼び出すときにデータベースを起動してデータをロードするまで待たなければならないということです。 。 – zstate