2017-02-15 10 views
19

私はドッカーには新しく、ボリュームのいくつかの概念は私にはかなり混乱しています。ボリュームに1つのファイルをマウントする方法

私がやろうとしているのは、PHPアプリケーションをドッキングすることです。 dockerファイルでアーカイブをダウンロードして解凍します。

新しいバージョンがリリースされ、ドッカーファイルを更新すると、config.phpが上書きされるため、アプリケーションを再インストールする必要があります。

私はデータベースと同じようにファイルをボリュームとしてマウントできると思っていました。

ボリュームとダイレクトパスの2つの方法で試しました。

ドッカー-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 

ただし、両方の方法が機能しません。マウントされたボリュームで、アップロードが作成されることがわかります。その後、

しかし、私は/ srcに/でそれをしようとした場合

/var/www/html/config.php \\」原因\\ "ではないディレクトリ\\" \ ""

で失敗しますドッキングウィンドウ/ myappに/アップロード/ config.phpの:

/var/www/html/config.phpドッカーは、config.phpのフォルダをアップロードフォルダを作成していないファイル

それとも別の方法があります。設定を引き継ぐ?

答えて

35

ファイルボリュームドッキングウィンドウでこの方法を行って(絶対パスの例(ENV変数を使用することができます)、およびファイル名を言及する必要があります):

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 

あなたの場合/src/docker/myappフォルダー

+12

私は /src/docker/myapp/upload/config.php:/var/www/html/config.php ドッカーが、その後、アップロードフォルダとconfig.phpのフォルダを作成しようとした場合、言ったように。ファイルではありません。 –

+4

あなたの投稿であなたは別に書きました。ファイルがある場合は、ファイルとしてマウントする必要があります。 – BlackStork

+0

https://docs.docker.com/engine/tutorials/dockervolumes/#/mount-a-host-file-as-a-data-volume < - はっきりと作業する必要があります – BlackStork

9

私は同じ問題を抱えていました。私は自分の設定ファイルをコンテナにインポートしようとしていたので、イメージを再構築せずに必要なときに修正することができました。

私は、以下のコマンドがコンテナから/root/app/config.pyをDockerホストの$(pwd)/config.pyにファイルとしてインポートすると考えました。

docker run -v $(pwd)/config.py:/root/app/config.py my_docker_image 

ただし、常にファイルではないconfig.pyという名前のディレクトリが作成されました。

手掛かりを探している間、私はあなたが見ることができるように私のドッキングウィンドウのホストが$(pwd)/config.pyを持っていないので、それは常にディレクトリとして作成され

If you use -v or --volume to bind-mount a file or directory that does not yet exist on the Docker host, -v will create the endpoint for you. It is always created as a directory.

hereから)理由を発見しました。

ドッカーホストにconfig.pyを作成しても、 $(pwd)/config.pyちょうどあふれた/root/app/config.py/root/app/config.pyをエクスポートしていません。

+2

'Dockerfile'に' touch path/to/file'を追加しました。私はそれがまだファイル(作成されたディレクトリではない) – shadi

関連する問題