[docker] ホストのディレクトリがコンテナ内ディレクトリにマウントされない
解決済
回答 4
投稿
- 評価
- クリップ 0
- VIEW 1,503
dockerについてです。
dockerでrailsの開発環境を構築しようとしているのですが、
docker-compose.ymlにvolumesをしていしているのにファイルがホストとコンテナで共有されていません。
これは私がマウントに関する理解が異なっているのでしょうか?
それともマウントする方法が間違っているのでしょうか?
以下docker-compose.yml
version: '3'
services:
rails:
build: .
ports:
- "3000:3000"
tty: true
volumes:
- .:/myapp
- bundle:/usr/local/bundle
depends_on:
- db
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
volumes:
- mysql_data:/var/lib/mysql
volumes:
bundle:
mysql_data:
FROM ruby:2.6.3
ENV LANG C.UTF-8
RUN apt-get update
RUN apt-get install -y node.js
RUN gem install bundler
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /myapp
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME
ホストのファイル構成
- Dockerfile
- docker-compose.yml
- Gemfile
- Gemfile.lock
コンテナ内myappディレクトリの中身
- sampleapp ←"rails new"で作成したプロジェクト
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
自己解決で申し訳ないです。
こちらの記事の応用形でc/Usersをマウントした結果、解決することができました
https://qiita.com/dojineko/items/f623894ef2436bef890e
回答してくださった皆様、ありがとうございます!
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
- bundle:/usr/local/bundle
- mysql_data:/var/lib/mysql
左側のbundleやmysql_dataにホストのディレクトリを直接記述してみてください。
で、最後のvolumes:
の定義は削除してみてください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
回答になってないけど、とりあえず確認してみたので。
質問文のdocker-compose.yml
とDockerfile
を全部コピペして作って、空のGemfile
とGemfile.lock
を作成して以下の手順で確認したところ、問題なくマウントされているように見えました。
docker-compose build
docker-compose up
- 別ターミナルで
docker exec -it (コンテナ名) /bin/sh
で接続 /myapp
の中身確認→docker-compose.yml
はじめ、バインドした階層のものは全部ある- コンテナ内で
/myapp
に移動してtouch aaa.txt
を実行→ホスト側でファイルが作成されたことを確認 - ホスト側で
a
ディレクトリ作成→コンテナ側でls /myapp
して作成されていることを確認
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
Windows 環境を前提にググると、
Docker tool-boxでwindowsホストディレクトリをマウントする
が見つかりました。質問者様の docker inspect の結果を見ると
"Binds": [
"/c/Users/bellw/workspace/dockerTest:/myapp:rw",
"dockertest_bundle:/usr/local/bundle:rw"
],
となっているので、先頭の / が足りないのではないでしょうか。つまり、.:/myapp
という書き方はできず、フルパスで書いて先頭に / を追加する必要があるのではないでしょうか。
volumes:
- "//c/Users/bellw/workspace/dockerTest:/myapp"
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.19%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
mit0223
2019/08/13 12:34
railsコンテナの docker inspect の結果を貼ってもらえますか。コンテナ名は ディレクトリ名_rails_1 になっていると思います。
wisheebell
2019/08/14 01:18
書き込みありがとうございます!
とても長文で書き込み切れないため、おそらく重要であろう前半部分のみ抜粋しました。
不足があれば追記します
{
"Id": "09fc903b63a18dfe8a95c7944bec071805d879c1090909ca56e98bf41841c048",
"Created": "2019-08-13T16:04:03.569323718Z",
"Path": "irb",
"Args": [],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 26257,
"ExitCode": 0,
"Error": "",
"StartedAt": "2019-08-13T16:04:04.128938724Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:aa19f1a5bac5db55254c4852d062361f482cd984237f84196c8b865063052cc8",
"ResolvConfPath": "/mnt/sda1/var/lib/docker/containers/09fc903b63a18dfe8a95c7944bec071805d879c1090909ca56e98bf41841c048/resolv.conf",
"HostnamePath": "/mnt/sda1/var/lib/docker/containers/09fc903b63a18dfe8a95c7944bec071805d879c1090909ca56e98bf41841c048/hostname",
"HostsPath": "/mnt/sda1/var/lib/docker/containers/09fc903b63a18dfe8a95c7944bec071805d879c1090909ca56e98bf41841c048/hosts",
"LogPath": "/mnt/sda1/var/lib/docker/containers/09fc903b63a18dfe8a95c7944bec071805d879c1090909ca56e98bf41841c048/09fc903b63a18dfe8a95c7944bec071805d879c1090909ca56e98bf41841c048-json.log",
"Name": "/dockertest_rails_1",
"RestartCount": 0,
"Driver": "overlay2",
"Platform": "linux",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": [
"c47f8d4f03977adbb2527ca0fda5ed2607cd3c086268c9d8f28c8a984f284f14"
],
"HostConfig": {
"Binds": [
"/c/Users/bellw/workspace/dockerTest:/myapp:rw",
"dockertest_bundle:/usr/local/bundle:rw"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "dockertest_default",
"PortBindings": {
"3000/tcp": [
{
"HostIp": "",
"HostPort": "3000"
}
]
},
"RestartPolicy": {
"Name": "",
"MaximumRetryCount": 0
},
mit0223
2019/08/14 14:49
おお、Windows ですね。docker for windows でしょうか?それともWSL?
Windows 固有の問題の可能性が高いので、動作環境について詳しい情報を記載していただく必要があると思います。docker クライアントとホストとなるVMの詳しい情報を記載してください。
上記 inspect の結果も含めて、コメントではなく、質問を編集していただくほうがいいです。
gentaro
2019/08/14 15:05
WSLでdockerはサポートされてません。(WSL2でサポートされる予定)
使っているとすればDocker for WindowsかDocker Toolboxだと思います。
gentaro
2019/08/14 15:07
本来であればそのへんをハッキリさせるために利用環境の情報は質問文になるべく詳細に記載するべきです。(質問テンプレートにもあるし)
https://teratail.com/help/question-tips#questionTips3-6
wisheebell
2019/08/14 19:59
すみません説明不足でした
OSはwindows10で
docker toolboxを使っています