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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

Q&A

解決済

4回答

5191閲覧

[docker] ホストのディレクトリがコンテナ内ディレクトリにマウントされない

wisheebell

総合スコア7

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

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

0グッド

0クリップ

投稿2019/08/13 02:34

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:

Dockerfile

1FROM ruby:2.6.3 2ENV LANG C.UTF-8 3 4RUN apt-get update 5RUN apt-get install -y node.js 6 7RUN gem install bundler 8 9WORKDIR /tmp 10ADD Gemfile Gemfile 11ADD Gemfile.lock Gemfile.lock 12RUN bundle install 13 14ENV APP_HOME /myapp 15RUN mkdir -p $APP_HOME 16WORKDIR $APP_HOME 17ADD . $APP_HOME

ホストのファイル構成

- Dockerfile - docker-compose.yml - Gemfile - Gemfile.lock

コンテナ内myappディレクトリの中身

- sampleapp ←"rails new"で作成したプロジェクト

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

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

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

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

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

mit0223

2019/08/13 03:34

railsコンテナの docker inspect の結果を貼ってもらえますか。コンテナ名は ディレクトリ名_rails_1 になっていると思います。
wisheebell

2019/08/13 16: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 05:49

おお、Windows ですね。docker for windows でしょうか?それともWSL? Windows 固有の問題の可能性が高いので、動作環境について詳しい情報を記載していただく必要があると思います。docker クライアントとホストとなるVMの詳しい情報を記載してください。 上記 inspect の結果も含めて、コメントではなく、質問を編集していただくほうがいいです。
gentaro

2019/08/14 06:05

WSLでdockerはサポートされてません。(WSL2でサポートされる予定) 使っているとすればDocker for WindowsかDocker Toolboxだと思います。
wisheebell

2019/08/14 10:59

すみません説明不足でした OSはwindows10で docker toolboxを使っています
guest

回答4

0

自己解決

自己解決で申し訳ないです。
こちらの記事の応用形でc/Usersをマウントした結果、解決することができました
https://qiita.com/dojineko/items/f623894ef2436bef890e

回答してくださった皆様、ありがとうございます!

投稿2019/08/15 02:53

wisheebell

総合スコア7

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

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

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"

投稿2019/08/14 06:02

mit0223

総合スコア3401

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

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

0

回答になってないけど、とりあえず確認してみたので。

質問文のdocker-compose.ymlDockerfileを全部コピペして作って、空のGemfileGemfile.lockを作成して以下の手順で確認したところ、問題なくマウントされているように見えました。

  1. docker-compose build
  2. docker-compose up
  3. 別ターミナルでdocker exec -it (コンテナ名) /bin/shで接続
  4. /myappの中身確認→docker-compose.ymlはじめ、バインドした階層のものは全部ある
  5. コンテナ内で/myappに移動してtouch aaa.txtを実行→ホスト側でファイルが作成されたことを確認
  6. ホスト側でaディレクトリ作成→コンテナ側でls /myappして作成されていることを確認

投稿2019/08/13 14:53

編集2019/08/13 14:56
gentaro

総合スコア8949

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

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

0

docker

1- bundle:/usr/local/bundle 2- mysql_data:/var/lib/mysql

左側のbundleやmysql_dataにホストのディレクトリを直接記述してみてください。
で、最後のvolumes:の定義は削除してみてください。

投稿2019/08/13 06:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

gentaro

2019/08/13 14:54

明言されてないからわかんないけど、困ってるのは/myappディレクトリの話じゃないんですかね。
wisheebell

2019/08/13 16:19

推察ありがとうございます。 まさにその通りでmyappについて困っています...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問