如何通过容器使用PostgreSQL启动Phoenix?
How to start Phoenix by using PostgreSQL through container?
我试过了:
$ alias psql="docker exec -ti pg-hello-phoenix sh -c 'exec psql -h localhost -p 5432 -U postgres'"
$ mix ecto.create
但得到了:
** (RuntimeError) could not find executable psql
in path, please guarantee it is available before running ecto commands
lib/ecto/adapters/postgres.ex:106: Ecto.Adapters.Postgres.run_with_psql/2
lib/ecto/adapters/postgres.ex:83: Ecto.Adapters.Postgres.storage_up/1
lib/mix/tasks/ecto.create.ex:34: anonymous fn/2 in Mix.Tasks.Ecto.Create.run/1
(elixir) lib/enum.ex:604: Enum."-each/2-lists^foreach/1-0-"/2
(elixir) lib/enum.ex:604: Enum.each/2
(mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2
(elixir) lib/code.ex:363: Code.require_file/2
我还尝试创建符号链接 /usr/local/bin/psql
:
#!/usr/bin/env bash
docker exec -ti pg-hello-phoenix sh -c "exec psql -h localhost -p 5432 -U postgres $@"
然后:
$ sudo chmod +x /usr/local/bin/psql
检查:
$ which psql
/usr/local/bin/psql
$ psql --version
psql (PostgreSQL) 9.5.1
运行 再一次:
$ mix ecto.create
** (Mix) The database for HelloPhoenix.Repo couldn't be created, reason given: cannot enable tty mode on non tty input
.
带有 PostgreSQL 的容器已启动:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
013464d7227e postgres "/docker-entrypoint.s" 47 minutes ago Up 47 minutes 5432/tcp pg-hello-phoenix
对我来说,我做了以下事情:
sudo docker exec -it postgres-db bash
获得互动后shell
psql -h localhost -p 5432 -U postgres
然后我手动创建我的数据库:
CREATE DATABASE cars_dev;
然后最后:
mix ecto.migrate
之后一切正常 :) 希望对您有所帮助。
我可以通过进入 /config/.exs 来做到这一点在我的情况下它是开发,所以 /config/dev.exs 并将主机名保留为 localhost 但为端口添加了另一个设置:32768 因为那是docker 暴露的端口。
确保在端口:和数字(不是字符串)之间放置 space。不然不行。
之后照常工作。自然的假设是用户名/密码在容器上也匹配。
我试过了:
$ alias psql="docker exec -ti pg-hello-phoenix sh -c 'exec psql -h localhost -p 5432 -U postgres'"
$ mix ecto.create
但得到了:
** (RuntimeError) could not find executable
psql
in path, please guarantee it is available before running ecto commands lib/ecto/adapters/postgres.ex:106: Ecto.Adapters.Postgres.run_with_psql/2 lib/ecto/adapters/postgres.ex:83: Ecto.Adapters.Postgres.storage_up/1 lib/mix/tasks/ecto.create.ex:34: anonymous fn/2 in Mix.Tasks.Ecto.Create.run/1 (elixir) lib/enum.ex:604: Enum."-each/2-lists^foreach/1-0-"/2 (elixir) lib/enum.ex:604: Enum.each/2 (mix) lib/mix/cli.ex:58: Mix.CLI.run_task/2 (elixir) lib/code.ex:363: Code.require_file/2
我还尝试创建符号链接 /usr/local/bin/psql
:
#!/usr/bin/env bash
docker exec -ti pg-hello-phoenix sh -c "exec psql -h localhost -p 5432 -U postgres $@"
然后:
$ sudo chmod +x /usr/local/bin/psql
检查:
$ which psql
/usr/local/bin/psql
$ psql --version
psql (PostgreSQL) 9.5.1
运行 再一次:
$ mix ecto.create
** (Mix) The database for HelloPhoenix.Repo couldn't be created, reason given: cannot enable tty mode on non tty input
.
带有 PostgreSQL 的容器已启动:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
013464d7227e postgres "/docker-entrypoint.s" 47 minutes ago Up 47 minutes 5432/tcp pg-hello-phoenix
对我来说,我做了以下事情:
sudo docker exec -it postgres-db bash
获得互动后shell
psql -h localhost -p 5432 -U postgres
然后我手动创建我的数据库:
CREATE DATABASE cars_dev;
然后最后:
mix ecto.migrate
之后一切正常 :) 希望对您有所帮助。
我可以通过进入 /config/.exs 来做到这一点在我的情况下它是开发,所以 /config/dev.exs 并将主机名保留为 localhost 但为端口添加了另一个设置:32768 因为那是docker 暴露的端口。
确保在端口:和数字(不是字符串)之间放置 space。不然不行。
之后照常工作。自然的假设是用户名/密码在容器上也匹配。