私はmultiple dockerfiles(サービスごとに1つ)を使用してアプリケーションを構築しています。次のように私のアプリのディレクトリ構造は次のとおりです。Docker:Dockerfileがサブディレクトリにある場合のCOPYの使用
私のウェブサーバのDockerfile
で
app
├── dockerfiles
│ ├── webserver
│ │ └── Dockerfile
│ └── database
│ └── Dockerfile
├── public
└── <frontend>
├── db
└── <data>
[...]
├── LICENSE
├── README.md
└── docker-compose.yml
、私はCOPY
コマンドを使用して、私の既存のコードにコピーしたい:
# Dockerfile
COPY ./public /var/www/html
そして私は私のdocker-compose.yml
を使用してアプリケーションをデプロイしたいですファイル:私は作業ディレクトリ(app
)からdocker-compose
を実行したときに
# docker-compose.yml
version: "3"
services:
webserver:
build: ./dockerfiles/webserver
image: webserver:php-apache
しかし、私はFOを取得しますllowingエラー:
Building webserver
Step 1/2 : FROM php:7.1.11-apache-jessie
---> cb6a5015ad72
Step 2/2 : COPY ./public /var/www/html
Service 'webserver' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder193736188/public: no such file or directory
私は私のウェブサーバのDockerfile
アプリのルートに移動した場合、このエラーは消えるので、私はそれがパスによって引き起こされるまたはコンテキストの問題を構築しているということを知っています。 (アプリのルートで)全体のアプリのための
(1)を使用して1 Dockerfile
、または
app
└── Dockerfile
:
そして、これを知って、私たちは、いずれかの方法で、問題の2つの方法のいずれかを修正することができます(2)各サービス(アプリのルートにある)に複数のDockerfiles
を使用する。
app
├── Dockerfile.webserver
└── Dockerfile.database
これらのソリューションは、すべてのために1 dockerfile /コンテナを使用してbest practice(1)ではないので悪いですが、この方法で編成複数dockerfilesを有するだけで乱雑になります(2)。
だから、私の質問は:
我々は元のディレクトリ構造を変更することなく、この問題を解決するにはどうすればよいですか? docker-compose.yml
に、基本的なランタイムコマンドに、dockerfilesに行われる必要がどのような変更
- ?
- すべてを整理するより良い方法はありますか?
WORKDIR
コマンドについてはどうなりますか?
理想的には、最善の解決策は、DEV(ローカル)および生産(遠隔)環境の両方のために働くので、今のところ、ボリュームを避けるせてください...
これは完全に機能しました。私はそれがビルドの文脈の問題でなければならないことを知っていましたが、私は解決策を探すのが非常に困難でした...これが近い将来同様の状況にある人を助けてくれることを願っています! – CodyAE