如何进入正在运行的postgres容器的psql?

我使用无花果网站上的教程创build了一个postgres容器。 我命名容器数据库

容器正在运行,我的应用程序连接正常。 我试图运行命令fig run db psqldb容器运行,并得到了错误:

psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

我怎样才能进入运行db容器psql接口?

fig将创build一个不同于fig.yml文件中使用的名字的docker容器

通过使用docker ps查找容器名称并查看NAMES列,我得到了它的工作。

然后使用docker exec -ti NAME_OF_CONTAINER psql -U YOUR_POSTGRES_USERNAME在运行的容器中运行psql命令docker exec -ti NAME_OF_CONTAINER psql -U YOUR_POSTGRES_USERNAME

请注意, docker exec在正在运行的容器上运行psql命令,而docker run将启动一个新的容器。


更新

无花果现在称为docker组成

你需要运行一个新的容器来连接图1所启动的容器。 这是因为默认情况下,主容器启动服务,如果你fig run db psql fig不会启动服务,而是运行psql客户端。 请参阅Dockerfile 。

因此,要连接到PostgreSQL服务,您需要运行另一个容器,链接到图1所启动的容器 。 请参阅https://registry.hub.docker.com/_/postgres/

首先,由于fig改变了开始的容器的名字,所以在完成之后检查docker ps容器的NAMES列。 然后:

 docker run -it --link <postgres_container_name>:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres' 

你可以做docker exec技巧,也可以用@sargas来描述,但是连接方式对我来说听起来更为正确。

你能发表docker ps的结果吗? 我的猜测是你需要指定postgres容器暴露的端口。 运行docker ps应该给你

 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 948b1f6ebc0a my_postgres:latest "/usr/lib/postgresql 6 days ago Up 6 days 0.0.0.0:49155->5432/tcp db 

并在你的数据库容器的PORTS列下查看,你会看到数据库实际公开的端口。 在这种情况下它是49155,但是如果没有在容器启动时明确指定,docker将select一个在49153和65535之间的随机端口。 您需要为psql提供-p选项,然后像这样定位该端口

 psql -p 49155 ... 

来源: https : //docs.docker.com/userguide/dockerlinks/