我试图使用docker-compose
访问PostgreSQL的shell(psql
),但遇到了一些困难...下面是我的docker-compose
文件:
main:
build: .
volumes:
- .:/code
links:
- postgresdb
environment:
- DEBUG=true
postgresdb:
build: utils/sql/
ports:
- "5432"
environment:
- DEBUG=true
字符串
我尝试通过main
和postgresdb
服务访问psql
,方法是运行docker-compose run postgresdb psql -h postgresdb -U docker mydatabase
个
但我得到的只有psql: could not translate host name "postgresdb" to address: Name or service not known
...我不明白,因为我在数据库配置文件中使用postgresdb
作为主机,例如:
DB_ACCESS = {
'drivername': 'postgres',
# Name of docker-compose service
'host': 'postgresdb',
'port': '5432',
'username': 'docker',
'password': '',
'database': 'mydatabase'
}
型
5条答案
按热度按时间0g0grzrc1#
自从最初提出这个问题以来,情况发生了一些变化。
以下是如何使用docker-compose访问PostgreSQL的shell(psql):
1.使用docker-compose.yml版本'2'配置文件
1.使用“depends_on”而不是“links”(版本“2”新增)
1.使用“服务”拆分容器
docker-compoose.yml
字符串
在您的Docker引擎 shell 中...
1.从
docker ps
命令中查找容器ID(或容器名称1.使用该id打开shell提示符
1.将用户切换到postgres用户帐户
1.运行psql
参见以下示例:
型
备注:
1.如果你想使用官方镜像创建一个postgres容器,你的docker-compose.yml可能看起来更像下面这样:
型
参考文献
https://docs.docker.com/compose/compose-file/
oogrdqng2#
让我们从一个最小的
docker-compose.yml
文件开始,以供参考:字符串
您可以使用
docker-compose up
提供服务。假设您有一个要连接的数据库,名为
test
。答案:
docker-compose run --rm postgres psql -h YOUR_SERVICE -U YOUR_USER -d YOUR_DATABASE
--rm
选项在退出后删除容器,这样就不会创建不必要的重复容器,而只是为了访问数据库。在我们的示例中,这将是
docker-compose run --rm postgres psql -h postgres -U postgres -d test
或者,你可以使用psql的连接字符串:
docker compose run --rm postgres psql -d postgres://YOUR_USER@YOUR_SERVICE/YOUR_DATABASE
个3phpmpom3#
您尝试从Postgresdb容器本身连接,但容器不知道您在
main
容器中设置的别名postgresdb
。请考虑以下示例:
字符串
现在您可以看到Postgresdb不知道如何解析
postgresdb
。但是postgresdb
无论如何都应该可以从main
中解析出来。您有几个机会来解决此问题:
1.尝试显式设置Postgresdb的主机名(在
docker-compose.yml
中);1.从
main
容器访问Postgresdb,方法如下:型
dtcbnfnu4#
以下为我工作:
在docker-compose.yaml中
字符串
运行
docker-compose up
后我能跑
型
去拿贝壳
备注:
1.我使用的是docker-compose版本3
1.我给psql容器起了一个名字(db)。这使我可以避免运行
docker ps
来获取container_id-u postgres
允许我以 postgres 超级用户的身份访问容器uubf1zoe5#
2023年:
字符串
瞧!