我有一个新生成的凤凰应用程序,我正在尝试Dockerize它。
我遇到了以下问题:如果我在本地启动Phoenix(qazxswpoi)它工作正常(连接到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。
尝试:
我已经尝试过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想要的那样)
您必须告诉Pheonix哪个主机可以访问您的数据库。这不是容器内的DATABASE_URL
- Postgres在不同的容器中运行。从您的屏幕截图看起来您已经命名了您的数据库容器localhost
,这意味着您可以从Phoenix容器内的postgres
命中数据库。更新本地连接详细信息以使用http://postgres
或将postgres
设置为docker-compose.yml文件中的环境变量。
如果我在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
。
${DATABASE_URL}
只适用于字符串REPLACE_OS_VARS
试一试。