Elixir和Docker

问题描述 投票:1回答:2

我有一个新生成的凤凰应用程序,我正在尝试Dockerize它。

我遇到了以下问题:如果我在本地启动Phoenix(q​​azxswpoi)它工作正常(连接到localhost PG)如果我在PROD(mix phx.server)中运行它连接到RDS

如果我在Docker / dev模式(MIX_ENV=prod mix phx.server)中运行,我得到这个连接errordocker-compose up

如果我在Docker / prod模式下运行,我会得到同样的错误

我认为Docker没有在本地连接是由于某些网络问题(localhost与docker主机),但它仍然在prod中运行时查找localhost。

尝试:

enter image description here

我已经尝试过Phoenix 1.3和最新的RC而没有运气。

Elixir确实在正常的prod.secret.exs数据库配置之上要求`docker-compose -f docker-compose.yml -f docker-compose.prod.yml up` `MIX_ENV=prod docker-compose -f docker-compose.yml -f docker-compose.prod.yml up`

我甚至尝试将PG容器放入组合设置并链接它。 Elixir仍然要求Localhost。

我的环境中没有DATABASE_URL。

我已经尝试了雨伞应用程序一直到香草凤凰城。没有爱。

我已经出口PORT(正如Elixir想要的那样)

docker elixir
2个回答
3
投票

您必须告诉Pheonix哪个主机可以访问您的数据库。这不是容器内的DATABASE_URL- Postgres在不同的容器中运行。从您的屏幕截图看起来您已经命名了您的数据库容器localhost,这意味着您可以从Phoenix容器内的postgres命中数据库。更新本地连接详细信息以使用http://postgres或将postgres设置为docker-compose.yml文件中的环境变量。


0
投票

如果我在Docker / dev模式下运行(docker-compose up),我会收到此连接错误

DATABASE_URL=postgres将使用dev config作为默认值,这意味着如果您使用dev模式运行映像,它将使用dev配置,DB主机名将为mix phx.server

如果我在Docker / prod模式下运行,我会得到同样的错误

通常,凤凰生成localhost没有prod.secret.exs,你需要手动添加它。如果你对hostname运行它,docker-compose应该是你在hostname中指定的数据库服务名称

我的环境中没有DATABASE_URL。

如果您尝试使用docker-compose.yml格式配置,则需要将此环境变量添加到docker-compose.yml后端服务配置中。一般来说,如果你使用DATABASE_URL,你可以在你的distillery中添加REPLACE_OS_VARS,然后你可以使用环境变量,如:rel/config.exs

  1. ${DATABASE_URL}只适用于字符串
  2. 你可以参考这个REPLACE_OS_VARS试一试。
© www.soinside.com 2019 - 2024. All rights reserved.