如何通过容器使用PostgreSQL启动Phoenix?

时间:2016-03-20 10:23:32

标签: postgresql docker phoenix-framework

我试过了:

$ alias psql="docker exec -ti pg-hello-phoenix sh -c 'exec psql -h localhost -p 5432 -U postgres'"
$ mix ecto.create

但得到了:

  

**(RuntimeError)在路径中找不到可执行文件psql,请保证在运行ecto命令之前它可用       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:在Mix.Tasks.Ecto.Create.run/1中匿名fn / 2       (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

2 个答案:

答案 0 :(得分:1)

我可以通过进入/config/.exs来实现这一点。在我的情况下,它是开发,所以/config/dev.exs并将主机名保留为localhost但添加了另一个端口设置:32768因为它'是docker暴露的端口。

确保在端口:和数字(不是字符串)之间放置一个空格。否则它就不会起作用。

之后像往常一样工作。自然的假设是用户名/密码也与容器匹配。

答案 1 :(得分:0)

对我来说,我做了以下事情:

sudo docker exec -it postgres-db bash

获得交互式shell之后

psql -h localhost -p 5432 -U postgres

然后我手动创建我的数据库:

CREATE DATABASE cars_dev;

最后:

mix ecto.migrate

之后一切正常:)希望它有所帮助。