在 Gitlab CI 上找不到 Docker 主机名

Could not find Docker hostname on Gitlab CI

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

构建阶段工作正常,但连接到数据库以进行 运行 测试时出现问题。我尝试连接到一个服务并 运行 连接另一个数据库容器,但从日志来看,问题似乎出在 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

这是 运行ner 的输出:

$ docker run --rm -t $CONTAINER echo $MIX_ENV $POSTGRES_USER $POSTGRES_HOSTNAME $POSTGRES_DB
test username db test_db

我想弄清楚为什么会出现此错误 :database is nil,以及它是否与 Gitlab、Ecto 或 Phoenix 有关。

编辑

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

我检查了实例是否 运行 docker ps

根据 :database is nil in repository configuration 消息,在我看来您的 POSTGRES_DB 变量未设置。您可以尝试将该配置行更改为

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

看看您是否仍然遇到同样的错误。如果你不这样做,你可以从那里调试。