【问题标题】:Could not find Docker hostname on Gitlab CI在 Gitlab CI 上找不到 Docker 主机名
【发布时间】:2018-06-29 10:58:00
【问题描述】:

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

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

我正在尝试找出为什么会出现此错误 :database is nil,以及它是否与 Gitlab、Ecto 或 Phoenix 有关。

编辑

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

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

【问题讨论】:

    标签: docker elixir phoenix-framework gitlab-ci ecto


    【解决方案1】:

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

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

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

    【讨论】:

    • 它不适用于静态名称,并且在我运行 docker run ... echo $POSTGRES_DB 时设置了环境变量。它也需要为数据库设置。
    猜你喜欢
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2019-05-09
    • 2021-05-04
    • 2020-03-08
    • 2018-01-26
    • 2020-07-08
    • 2018-03-03
    相关资源
    最近更新 更多