在Gitlab CI上找不到Docker主机名

在Gitlab CI上找不到Docker主机名,docker,elixir,phoenix-framework,gitlab-ci,ecto,Docker,Elixir,Phoenix Framework,Gitlab Ci,Ecto,我在基于Elixir映像的Docker容器中有一个应用程序,需要连接到数据库并使用Gitlab runner运行测试 构建阶段工作正常,但连接到数据库以运行测试时出现问题。我尝试连接到一个服务并运行另一个数据库容器,但从日志来看,问题似乎出在Phoenix应用程序上: ** (RuntimeError) :database is nil in repository configuration lib/ecto/adapters/postgres.ex:121: Ecto.Adapters

我在基于Elixir映像的Docker容器中有一个应用程序,需要连接到数据库并使用Gitlab runner运行测试

构建阶段工作正常,但连接到数据库以运行测试时出现问题。我尝试连接到一个服务并运行另一个数据库容器,但从日志来看,问题似乎出在Phoenix应用程序上:

** (RuntimeError) :database is nil in repository configuration
    lib/ecto/adapters/postgres.ex:121: Ecto.Adapters.Postgres.storage_up/1
    lib/mix/tasks/ecto.create.ex:40: anonymous fn/3 in Mix.Tasks.Ecto.Create.run/1
    (elixir) lib/enum.ex:675: Enum."-each/2-lists^foreach/1-0-"/2
    (elixir) lib/enum.ex:675: Enum.each/2
    (mix) lib/mix/task.ex:301: Mix.Task.run_task/3
    (mix) lib/mix/cli.ex:75: Mix.CLI.run_task/2
这就是
config/test.exs
文件的外观

config :app, App.Repo,
  adapter: Ecto.Adapters.Postgres,
  username: System.get_env("POSTGRES_USER"),
  password: System.get_env("POSTGRES_PASSWORD"),
  database: System.get_env("POSTGRES_DB"),
  hostname: System.get_env("POSTGRES_HOSTNAME"),
  pool: Ecto.Adapters.SQL.Sandbox
这是运行程序的输出:

$ docker run --rm -t $CONTAINER echo $MIX_ENV $POSTGRES_USER $POSTGRES_HOSTNAME $POSTGRES_DB
test username db test_db
我试图弄清楚为什么会出现这个错误:数据库是nil,它是否与Gitlab、Ecto或Phoenix有关

编辑 我在
config/*.exs
文件中写入了静态值(出于某种原因,它没有提取它们),但现在它找不到postgresql主机名。虽然postgresql实例正在运行,但找不到它


根据以下消息,我检查了该实例是否使用
docker ps

运行:存储库配置中的数据库为nil在我看来,您的
POSTGRES\u DB
变量未设置。您可以尝试将该配置行更改为

database: System.get_env("POSTGRES_DB") || "postgres"

看看你是否仍然得到同样的错误。如果没有,您可以从那里进行调试。

它不能使用静态名称,环境变量是在我运行
docker run时设置的。。。echo$POSTGRES\u DB
。它也需要为数据库设置。