在 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"
看看您是否仍然遇到同样的错误。如果你不这样做,你可以从那里调试。
我在基于 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"
看看您是否仍然遇到同样的错误。如果你不这样做,你可以从那里调试。