如何进入正在运行的postgres容器的psql?
我使用无花果网站上的教程创build了一个postgres容器。 我命名容器数据库 。
容器正在运行,我的应用程序连接正常。 我试图运行命令fig run db psql
与db容器运行,并得到了错误:
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/