[解決済み] ボリュームに単一ファイルをマウントする方法
質問
PHPアプリケーションをDockerizeしようとしています。dockerfileの中で、アーカイブをダウンロードし、それを展開する、などを行っています。
すべてうまくいきます。しかし、新しいバージョンがリリースされ、dockerfileを更新すると、config.phpが上書きされてしまうため、アプリケーションを再インストールする必要があります。
そこで、データベースと同じように、ファイルをボリュームとしてマウントすればいいのではないかと考えました。
ボリュームと直接パスの2通りの方法で試してみました。
docker-composeです。
version: '2'
services:
app:
build: src
ports:
- "8080:80"
depends_on:
- mysql
volumes:
- app-conf:/var/www/html/upload
- app-conf:/var/www/html/config.php
environment:
DB_TYPE: mysql
DB_MANAGER: MysqlManager
mysql:
image: mysql:5.6
container_name: mysql
volumes:
- mysqldata:/var/lib/mysql
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD:
MYSQL_DATABASE:
MYSQL_USER:
MYSQL_PASSWORD:
volumes:
mysqldata:
app-conf:
その結果、エラーが発生します。
そして、指定されたパスで、マウントされたボリュームとして試してみました。
/src/docker/myapp/upload:/var/www/html/upload
/src/docker/myapp/upload:/var/www/html/config.php
しかし、どちらの方法もうまくいきません。マウントされたボリュームでは、アップロードが作成されるのがわかります。
しかし、その後、次のように失敗します。
/var/www/html/config.php" caused \"not a directory"""
で試すと
/src/docker/myapp/upload/config.php:/var/www/html/config.php
Dockerはuploadフォルダを作成し、さらにconfig.phpフォルダを作成します。ファイルではありません。
それとも、コンフィグを永続化する他の方法があるのでしょうか?
解決方法は?
<ブロッククオートTL;DR/注意事項
マウントしようとしているファイルの代わりにディレクトリが作成された場合、おそらく、マウントしようとするファイルに 有効 と 絶対 のパスがあります。これは、無言で混乱する失敗モードで、よくある間違いです。
ファイルボリュームはdockerでこのように行われます(絶対パスの例(環境変数使用可)、ファイル名を記載する必要があります):
volumes:
- /src/docker/myapp/upload:/var/www/html/upload
- /src/docker/myapp/upload/config.php:/var/www/html/config.php
することもできます。
volumes:
- ${PWD}/upload:/var/www/html/upload
- ${PWD}/upload/config.php:/var/www/html/config.php
からdocker-composeを起動した場合。
/src/docker/myapp
フォルダ
関連
-
[解決済み】docker: ドライバがエンドポイントウェブサーバの外部接続のプログラミングに失敗しました。
-
[解決済み】D-Bus接続の取得に失敗しました。操作が許可されていません
-
[解決済み] ドッカーコンテナで接続が拒否される
-
docker encountered problem 4: yaml: line 1: mapping values are not allowed in this context.
-
docker base container in bash: sudo: command not found 問題が解決されました。
-
docker学習用イメージの作成にdockerfileを使用した場合の落とし穴
-
[解決済み] ホストからDockerコンテナにファイルをコピーする方法は?
-
[解決済み] リポジトリを使用せずに、あるホストから別のホストにDockerイメージをコピーする方法
-
[解決済み】Dockerは仮想マシンとどう違うの?
-
[解決済み] Dockerのenvファイルに相当するKubernetesの機能
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】デーモンからのエラー応答:getsockopt: 接続が拒否された
-
[解決済み] Dockerの初期化に失敗しました
-
[解決済み] docker-proxy - 443 でバインドしようとすると、ユーザーランドプロキシーを開始する際にエラーが発生します。
-
Docker npm getaddrinfo EAI_AGAIN registry.npmjs.org registry.npmjs.org:443
-
docker 環境に opencv をインストールします ImportError: libGL.so.1: cannot open shared object file: そのようなファイルやディレクトリはありません
-
dockerでgitlabをインストールする際にパーミッションの例外が発生する
-
kubernetesの後に参加した作業ノードが "NotReady "状態である。
-
接続中にDocker useエラーが発生しました。このエラーは、Docker デーモンが実行されていないことを示す可能性があります。
-
docker-composeの使い方ガイド
-
docker-composeはmysqlをボリュームでデプロイする際のパーミッション拒否の問題を解決します。