Docker 长生不老药和码头工人
我有一个新生成的Phoenix应用程序,我正在尝试将其Dockerize 我遇到了以下问题: 如果我在本地启动Phoenix(Docker 长生不老药和码头工人,docker,elixir,Docker,Elixir,我有一个新生成的Phoenix应用程序,我正在尝试将其Dockerize 我遇到了以下问题: 如果我在本地启动Phoenix(mix phx.server),它工作正常(连接到localhost PG) 如果我在PROD(MIX_ENV=PROD MIX phx.server)中运行它,它将连接到RDS 如果我在Docker/dev模式(Docker compose up)下运行,我会收到此连接错误 如果我在Docker/prod模式下运行,我会得到相同的错误 我认为Docker没有本地连接是由
mix phx.server
),它工作正常(连接到localhost PG)
如果我在PROD(MIX_ENV=PROD MIX phx.server
)中运行它,它将连接到RDS
如果我在Docker/dev模式(Docker compose up
)下运行,我会收到此连接错误
如果我在Docker/prod模式下运行,我会得到相同的错误
我认为Docker没有本地连接是由于一些网络问题(localhost与Docker host),但它在prod中运行时仍然会查找localhost
尝试:
`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`
我试过Phoenix 1.3和最新的RCs,但运气不佳
Elixir确实要求在正常的prod.secret.exs数据库配置上添加一个数据库URL
我甚至尝试将一个PG容器放入compose设置并链接它。Elixir仍然要求本地主机
“我的环境”中没有数据库URL
我一直在尝试雨伞应用程序,直到香草凤凰。没有爱
我已经导出了端口(Elixir希望如此)您必须告诉Pheonix访问数据库的主机。这不是容器中的
localhost
——Postgres在另一个容器中运行。从您的屏幕截图上看,您将数据库容器命名为postgres
,这意味着您可以在http://postgres
从Phoenix容器中取出。更新本地连接详细信息以使用postgres
,或在docker-compose.yml文件中将DATABASE\u URL=postgres
设置为环境变量
如果在Docker/dev模式(Docker compose up)下运行,则会出现此连接错误
mix phx.server
将使用dev config作为默认设置,因此这意味着如果您使用dev模式运行映像,它将使用dev config,DB主机名将是localhost
如果我在Docker/prod模式下运行,我会得到相同的错误
通常,phoenix会生成prod.secret.exs
没有hostname
,您需要手动添加它。如果针对docker compose
运行它,则hostname
应该是您在docker compose.yml
中指定的数据库服务名称
“我的环境”中没有数据库URL
如果尝试使用数据库\u URL
格式配置,则需要将此环境变量添加到docker-compose.yml后端服务配置中。通常,如果使用蒸馏厂
,则可以在rel/config.exs
中添加替换变量
,然后可以使用环境变量,如:${DATABASE\u URL}
REPLACE_OS_VARS
仅适用于字符串我设置了prod.secret.exs,指向prod中的AWS RDS,但没有运气;还直接链接到PG容器。docker-compose.yml中接受作为数据库的URL实现了这一点。谢谢