docker-compose.yml
がドッカーコンテナ内にアプリケーションフォルダをマウントしていることを確認したので、同様のシナリオでいくつかのコンパイルの問題を解決した方法をさらに詳しく説明します。これはあなたが尋ねている特定のエラーには対処しませんが、あなたの問題に対するより適切な答えを見つけるための指針として役立つかもしれません。
私はMac OS/X上で開発し、docker debianベースのイメージを使用してPhoenix Frameworkプロジェクトを構築します。私はdocker -v "$PWD":/app -w /app potz/elixir-build mix phoenix.server
(potz/elixir-build
は私がいくつかのものがプリインストールされているちょうどカスタム画像です)経由でコンテナの中にアプリケーションフォルダをマウントします。これは問題があります。なぜなら、フェニックスがコンテナ内で実行されると、あらかじめコンパイルされた成果物を持つ_build
ディレクトリがあり、それを使用しようとしますが、もちろん、別のプラットフォームに構築されているため、あらゆる種類の奇妙なコンパイルエラーメッセージがスローされます/バツ)。また、依存関係は./deps
フォルダーに保存され、OS/Xでもあらかじめコンパイルされています。
問題の解決方法は、同じアプリケーションソースファイルを使用しながら、2つの環境を効果的に分離し、ビルド成果物と依存関係の両方に異なるフォルダを使用するようにドッキングするように指示することです。私は、環境変数で上書きするmix.exs
でbuild_path
とdeps_path
設定できるようにする必要があることを行うためには:
# /build and /deps can be folders inside the container,
# or mounted volumes, whatever makes sense to your specific setup
docker run -v "$PWD":/app -w /app -e BUILD_PATH=/build -e DEPS_PATH=/deps potz/elixir-build mix phoenix.server
:ドッキングウィンドウ上で動作しているとき
def project do
[app: :my_app,
version: "0.0.1",
elixir: "~> 1.3",
elixirc_paths: elixirc_paths(Mix.env),
compilers: [:phoenix, :gettext] ++ Mix.compilers,
build_embedded: Mix.env == :prod,
build_path: System.get_env("BUILD_PATH") || "_build", # Allows different path for builds
deps_path: System.get_env("DEPS_PATH") || "deps", # Allows different path for deps
start_permanent: Mix.env == :prod,
aliases: aliases(),
deps: deps()]
end
をそれから私は、環境変数、例えばとして、これら2つの値を提供します
もちろん、この巨大なコマンドラインを覚えていないようにするカスタムシェルスクリプトがありますが、私はあなたのDocker作成設定に適応できると推測しています。最初にコンテナ内に作成されたフォルダがあることを確認するか、パスに2つの余分なボリュームをマウントすることを覚えておくだけです。
こちらがお役に立てば幸いです。
Docker内でphoenixアプリケーションを実行しているとお伝えします。あなたはDockerマウント( 'docker -v" $ PWD ":/ app ...'のように)を使って開発で使用しているのと同じアプリケーションフォルダを使用していますか?そうであれば、Phoenixは別のプラットフォームでコンパイルされた '。/ build'フォルダのあらかじめ構築された成果物を使用している可能性があります。 – potz
@PotiguarFaga私たちはDocker Composeを使用していますので、 'docker-compose.yml'は同じアプリケーションフォルダを使用します。エンドユーザがホストマシン上で通常のコンパイルを行っていても、Docker経由でも使用しようとしているというのは正しいかもしれません。 –