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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Docker

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

Q&A

解決済

2回答

3299閲覧

docker内コンテナのファイルとMacローカルファイルの同期

yoshi0606

総合スコア25

Docker

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

0グッド

0クリップ

投稿2019/02/13 09:16

編集2019/02/14 06:59

前提・実現したいこと

エディタで保存したファイルをコンテナ内のsqlファイルに同期させたい
作業としてエディタでsql編集•保存、Macターミナルからdockerのmysqlコンテナに接続
mysqlコマンドで実行するという流れをやりたいです。
お手数ですがどなたかご教授願います。

同期したいファイルの場所

macローカルファイル: User/testname/php-project/database/user.sql mysqlコンテナ: (docker inspectのマウント情報) "Mounts": [ { "Type": "volume", "Name": "b46fdabe1ab7188b6f0143766385ab7392e4354abcc3e5507d01f8b76b1f2ba3", "Source": "/var/lib/docker/volumes/b46fdabe1ab7188b6f0143766385ab7392e4354abcc3e5507d01f8b76b1f2ba3/_data", "Destination": "/var/lib/mysql", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ],

試したこと

補足情報(FW/ツールのバージョンなど)

macOS:Mojave ver10.14.3
dockerEngine:18.09.1
mysql:Ver 5.7
エディタ:VScode

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

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

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

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

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

DaichiYasuda

2019/02/13 16:04

やりたいことが全くわからないです. >エディタで保存したファイルをコンテナ内のsqlファイルに同期させたい なぜですが?目的は同期だけではなさそうですが.,, >同期ではなくファイルを都度コピー 都度コピーというのはどのようなコマンドでどこからどこに何をコピーしていますか? docker exec でコンテナに入ってからcpコマンドを実行してもローカルからコンテナへファイルコピーできないですよね. 現状はvolumeを作成して,コンテナの/var/lib/mysqlにマウントしていますよね. 想像ですが,最終的にしたいことは, ①Macでsqlファイルを修正 ②sqlファイルをmysqlに流す ということでしょうか?
yoshi0606

2019/02/14 06:57

返信遅くなりました。 説明が不足していました。すいません。 おっしゃる通りでMacでsqlファイルを修正際にコンテナ内のmysqlへ反映できるかどうかです。ネット調べるとマウント関連の情報が出てきますが、未だ理解できてません。 目的はMySQLとDocker学習中で、mysql sourseコマンドで外部ファイルをDocker内で読み込みたい。そして編集と同時に反映できるかどうか(同期?) ①Macでsqlファイルの編集 ②docker exec -it mysql bash cd ./var/lib/mysql ③mysql -u root -p ④ >mysql \. ./user.sql  ターミナルではmysqlサーバーで接続した状態で、 Macでsqlファイル編集 → >mysql \. ./user.sqlという流れです。
guest

回答2

0

ベストアンサー

マウントしている状態でも,sqlファイルを修正→すぐにmysqlにデータが流れる.は難しいです.

docker runコマンドに -v ./sql:/sql をつけると,カレントにあるsqlフォルダがDockerの/sqlにマウントされます.
ファイルのみのマウントは出来ないはずです.

↑のコマンドで./sqlディレクトリがマウントされるのでその中にあるファイルはコンテナと同期されています.

次に編集したsqlファイルを流すとのことですが,コンテナにexecで接続する必要はありません.

docker exec -it <container_name> mysql -h localhost -u /sql/mysql .sql > DBNAME
これでいくはずです

投稿2019/02/15 09:19

編集2019/02/16 04:35
DaichiYasuda

総合スコア173

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

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

yoshi0606

2019/02/15 10:11

ご丁寧にありがとうございます
guest

0

bash

1docker exec -it コンテナ名 bashでログイン 2cd var/lib/mysqlへ移動 3cp コマンドでコピーし実行

上記の処理をスクリプトにして、、execコマンド経由でスクリプトを起動するようにしてあげれば良いかと思います。
コンテナ内にスクリプトを置くパターンと、ホスト側に置くパターンがあります。
前者はdockerfileを作成してイメージを作成する必要があり、後者であれば既存のコンテナを利用できるかと。何れにしてもmysqlクライアントがコンテナにインストールされている前提ですが。

投稿2019/02/13 10:45

t_obara

総合スコア5488

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問