Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 长生不老药和码头工人_Docker_Elixir - Fatal编程技术网

Docker 长生不老药和码头工人

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没有本地连接是由

我有一个新生成的Phoenix应用程序,我正在尝试将其Dockerize

我遇到了以下问题: 如果我在本地启动Phoenix(
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实现了这一点。谢谢