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

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

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

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

Docker

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

Q&A

解決済

1回答

5932閲覧

docker cpコマンドがうまくいかない

wesker.alice

総合スコア45

docker-compose

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

Docker

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

0グッド

1クリップ

投稿2020/09/28 03:08

編集2020/09/28 04:55

書籍「Ruby on Rails6実践ガイド」を読み進めています。
現在P48で行き詰まっています。
『「Baukis2」のプオジェクトディレクトリ直下にspecディレクトリがあります。その下にexperimentsというサブディレクトリを作り、string_spec.rbというファイルを作成してください』と書かれていて、新規ディレクトリと新規ファイルをディレクトリ下に作ることはできたのですが、コンテナからホストにコピーする術がどうしても分からずwebコンテナ上にあるstring_spec.rbに記述するコードを編集することができず、進むことができません。

webコンテナからホストOS側にファイルをコピーさせたいのですが、ディレクトリの記述がうまくいっていないようで、困っています。

やりたいこと。
webコンテナ側のファイルをホストOS側にコピーして編集し、
ホストOS側からwebコンテナ側に編集済みのファイルをコピーし直したいと考えています。

webコンテナ
app/baukis2/spec/experiments/string_spec.rb
この「string_spec.rb」をホスト側にコピーしたいと考えています。

ホストOS側
ユーザー名/rails-compose/apps/baukis2/spec/experiments
この「experiments」のディレクトリの中にコピーデータを入れたいと思っています。

コマンドとしては
$ docker cp rails6-compose_web_1:/apps/baukis2/spec/experiments/string_spec.rb /ユーザー名/apps/baukis/spec/experiments
だと思うのですが、
「invalid output path: directory "/ユーザー名/apps/baukis2/spec" does not exist」
ディレクトリが存在しないと出てしまい、どうすればうまくコピーされるのか分かりません。
ディレクトリをどう記述すればうまくいくのかを教えていただきたいです。

さらに調べてみるとVSCodeの中で引き出して編集できるようなので、
Remote - Containers
Remote - SSH
Remote - SSH:Editing Configuration Files
Remote - WSL
Remote - Development
をインストールしたのですが、まずはコンテナからホストにコピーして、ホスト側で編集したものをコンテナにコピーし直すからやった方が良いかなと感じました。

様々なサイトを参考にしているのですが、なかなかうまくいきません。
何卒よろしくお願いします。

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

Ruby 2.6.3p62
Rails 6.0.3.2
macOS Catalina 10.15.6
VSCOde 1.47.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

修正

Remote - WSL

でWSLの話かと思いましたが、動作環境書いてあるのを見落としてました。
回答内容的にはそれほど変更はありません
正しいディレクトリを指定していないため発生しているエラーなので。

こういう記事を参考にしてGUI上から正しいパスを取得して、それを記述すればいいのではないでしょうか。


WSL使ってるみたいですが、WSL側のディレクトリ構造を考えると
/ユーザー名/apps/baukis/spec/experiments
という階層は普通ありえないと思うんで、シンプルに出力ディレクトリを間違っているだけじゃないですか?

/home/ユーザー名/apps/baukis/spec/experimentsならあるのかもしれませんが。

WSLはあくまでLinuxを動かす仕組みなので、WSL側で動くLinuxのディレクトリ階層をちゃんと理解しているのか、というところがまず怪しいため、確認した方が良いです。

投稿2020/09/28 04:22

編集2020/09/28 05:02
gentaro

総合スコア8949

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

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

wesker.alice

2020/09/28 04:58 編集

ご回答ありがとうございます。 自身、ディレクトリ階層について、きちんと理解できていません。 なので参考サイトを見ても自身のディレクトリ 階層に当てはめることができず、どうしてもうまいこといきません。 質問ですが詳しく書いていなかったので誤解を招いてしまいました。 WSLではなくRuby on Ralis6を使ってwebコンテナ上からホストOS側にファイルをコピーしてホスト側で編集し、コンテナにコピーし直し再起動して反映させる方法ができないかなと思っていました。 補足情報でマシンのバージョンなどを追記しました。
wesker.alice

2020/09/28 05:05

ご回答ありがとうございます。 私も補足情報を記載するのを忘れていたので誤解を与えてしまい、すみません。 詳しいリンクも載せていただきありがとうございます。 チェックして再度挑戦してみます。
wesker.alice

2020/09/29 04:57 編集

Mac側のディレクトリ階層についてはパスのコピーで記述ができました。 しかし、コンテナ側のパスがどうも分からずどうやっても 「Error: No such container:path:」とコンテナのパスが違いますとエラーが出てしまいます。 https://teratail.com/questions/98874 この質問が若干似ているなと感じました。 ひとつ気になったのですが、ホストとMacのデスクトップなどのディレクトリは別物という認識なのでしょうか? 調べているとdocker runをしないといけない旨の記述が目に入ったのですが、コンテナからホストOS(現物で動かしているmacOSのディレクトリ)へのファイルのコピーはホスト側をdocker runした上でパスを設定してから行うのか、ますますややこしく感じてしまい、各々の認識がごちゃごちゃになってしまいました。
gentaro

2020/09/29 05:15

> ホストとMacのデスクトップなどのディレクトリは別物という認識なのでしょうか? 通常この文脈で「ホスト」と言えばMacのこと(Dockerの動くホスト)ですが、もしdockerのコンテナ環境ことを言いたいのであれば別物です。 > ファイルのコピーはホスト側をdocker runした上でパスを設定してから行うのか そもそもdocker runをして起動していないコンテナからファイルのコピーはできません。 dockerの基礎的な動作についてわからないのであれば、公式ドキュメントにひととおり目を通してください。 https://docs.docker.com/get-started/
wesker.alice

2020/09/29 05:22

ありがとうございます。 公式ドキュメントを読み進めてから再度チャレンジしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問