docker run で ./ 相対パスを使用してファイルまたはディレクトリをマウントできない問題を解決する

docker run で ./ 相対パスを使用してファイルまたはディレクトリをマウントできない問題を解決する

docker-compose.yml ファイルで './' 相対パスを許可する

バージョン: '3'
 ...
 ボリューム:
 - ./init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
 - ./mongo-volume:/data/db
 ...

現在のパスにある init-mongo.js ファイルは、コンテナー内の /docker-entrypoint-initdb.d/init-mongo.js にマウントされ、読み取り専用モードに設定されます。

現在のパスの下のmongo-volumeディレクトリはコンテナ/data/dbにマウントされます。mongo-volumeが存在しない場合は、ディレクトリが自動的に作成されます。

しかしdocker runの場合は上記のような相対パスは使用できません

>>> docker run -d --restart always -p 27017-27019:27017-27019 -e MONGO_INITDB_DATABASE=job -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root -v $PWD/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro -v ./mongo-volume:/data/db --name my-mongo-container mongo
docker: デーモンからのエラー応答: ./init-mongo.js を作成: 「./init-mongo.js」にはローカル ボリューム名に無効な文字が含まれています。「[a-zA-Z0-9][a-zA-Z0-9_.-]」のみが許可されます。ホスト ディレクトリを渡す場合は、絶対パスを使用してください。
「docker run --help」を参照してください。

ドット「.」を置き換えるには $PWD を使用する必要があります。

>>> docker run -d --restart always -p 27017-27019:27017-27019 -e MONGO_INITDB_DATABASE=job -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=root -v $PWD/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro -v $PWD/mongo-volume:/data/db --name my-mongo-container mongo
3081e25a20fa8b2e95850897b3b32b08da298f73d7e458119fa3f2c85b45f020

補足: Docker -v にはマウントされたディレクトリに対する権限がありません 権限が拒否されました

1. 問題

今日、docker を使用して redis をマウントすると、常にエラーが発生しました。

docker run -v /home/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis2 -p 6378:6379 redis redis-server /usr/local/etc/redis/redis.conf

その後、エラーが報告され続けます:

致命的なエラーです。設定ファイル '/usr/redis/redis.conf' を開けません

2. トラブルシューティングのプロセス

ログも確認してください。

次に、設定ファイルが使用されていた場所を削除しました

docker run -v /home/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis2 -p 6378:6379 redis

次にコンテナに入ります

docker exec -it redis2 /bin/bash

次にマウントされたフォルダに移動します

/usr/local/etc/redis をコピーします

エラーが見つかりました:

ディレクトリ '.' を開けません: 権限が拒否されました

つまり、許可がない

3. 原因と解決策

3.1 理由

Centos7のセキュリティモジュールselinuxは権限を無効にしています

3.2 解決策

解決方法は3つあります。

1. 実行時に --privileged=true を追加する

docker run -v /home/redis/redis.conf:/usr/local/etc/redis/redis.conf --name redis2 --privileged=true redis redis-server /usr/local/etc/redis/redis.conf

2. selinuxを一時的にオフにしてから再度オンにする

[root@localhost tomcat]# setenforce 0
[root@localhost tomcat]# setenforce 1

3. Linuxルールを追加し、マウントするディレクトリをselinuxホワイトリストに追加します。

セキュリティテキストを変更する形式は次のとおりです。

chcon [-R] [-t タイプ] [-u ユーザー] [-r ロール] ファイルまたはディレクトリ

パラメータなしのオプション:

-R: このディレクトリの下にあるすべてのディレクトリも同時に変更されます。

-t: セキュリティ ドキュメントのタイプ フィールドが続きます (例: httpd_sys_content_t)。

-u : 続いて ID 識別子 (例: system_u) が続きます。

-r: 次の通りの色、例: system_r

埋め込む:

chcon -Rt svirt_sandbox_file_t /home/redis/redis.conf

4. Dockerマウントに関する経験

4.1 コンテナディレクトリは相対パスにできません

4.2 ホストディレクトリが存在しない場合は自動的に生成されます

4.3 ホストディレクトリが相対パスの場合はどうなりますか?

この質問に対する答えは、docker inspect コマンドを使用してコンテナの「マウント」セクションを確認することで得られます。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。間違いや不備な点がありましたら、遠慮なくご指摘ください。

以下もご興味があるかもしれません:
  • Docker ファイルの保存パス、ポート マッピング操作モードの変更
  • Docker ファイルの保存パス、コンテナの起動コマンド操作の取得
  • Docker の Windows ストレージ パス設定操作

<<:  CSS3 を使用して中心点の周りに要素を配置する方法の例

>>:  vue.js でよく使われる v 命令の解析

推薦する

Docker メモリ監視とストレステストの方法

起動していたDockerコンテナはメモリを使い果たした状態になっており、再起動せずにコンテナのメモリ...

LinuxのCentos7でmysql5.7.29を構築する詳細なプロセス

1. MySQLをダウンロードする1.1 ダウンロードアドレスhttps://downloads.m...

水平プログレスバーの最後にテキストを表示するための実装コードの CSS 記述

問題の説明仕事で以下の成果を達成したいと考えています。 解決div タグに相対配置を追加し、絶対配置...

シンプルなHTMLとCSSの使い方の詳細な説明

HTML と CSS を含む JD.com のホームページの静的ページ効果を 3 日間で完成させます...

JavaScript における this ポイントの問題の詳細な説明

要約する地球環境 ➡️ ウィンドウ通常関数 ➡️ ウィンドウまたは未定義コンストラクター ➡️ 構築...

JSオブジェクトの走査順序の詳細な説明

JavaScript ではオブジェクトを走査する順序は固定されていないと聞いたことがある人もいるかも...

Dockerイメージのインポートとエクスポートの実装

GitLabのDocker使用法gitlab ドッカー起動コマンド docker run -d -p...

JavaScriptオブジェクトをマージするさまざまな方法の詳細な説明

目次オブジェクトをマージするさまざまな方法(インターフェースを通じてデータを取得し、それをローカル ...

Reactは、読み込み、読み込み完了、読み込み失敗の3つの段階の原則分析を実装します。

最近ブログに書いたのですが、プロジェクトリストの中に写真がたくさんあり、最初は読み込みが遅いので、ス...

ElementUI のネストされたテーブルに基づいて複数選択を実装するためのサンプル コード

序文:私は友人のプロジェクトのバグを修正するのを手伝ったのでこれを書きました。この関数を書くのは初め...

Ubuntu 20.04 に Python 3 仮想環境をインストールする詳細なチュートリアル

以下はすべて仮想マシン上で実行されます1. pip3をインストールするsudo apt で pyth...

Dockerコンテナはルーティングを介して直接通信し、ネットワーク通信を実現します。

概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...

JSネイティブ2列シャトル選択ボックスの実装例

目次いつ使うか構造的ブランチコードいつ使うか選択動作を完了するには、2 つの列間で要素を直感的に移動...

Linux システムで MySQL データベースの解凍バージョンをインストールして構成する方法

1. ファイルを現在のディレクトリに解凍しますコマンド: tar -zxvf mysql....ta...

ハードコーディングに別れを告げ、フロントエンドテーブルがインスタンスコードを自動的に計算できるようにします。

序文私のチームが税制モジュールを開発していたとき、計算問題、特にグリッド内の計算を解決するために時間...