我试过了:
$ 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
答案 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
之后一切正常:)希望它有所帮助。