Dab*_*gab 43 postgresql docker docker-compose
我想在postgres图像中使用psql,以便在数据库上运行一些查询.但不幸的是,当我附加到postgres容器时,我得到了错误,找不到psql命令...
对我来说,如何在容器中运行postgre sql查询或命令是一个谜.
如何在postgres容器中运行psql命令?(我是Docker世界的新人)
我使用Ubuntu作为主机,我没有在主机上安装postgres,我使用postgres容器代替.
docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
yiialkalmi_app_1 /bin/bash Exit 0
yiialkalmi_nginx_1 nginx -g daemon off; Up 443/tcp, 0.0.0.0:80->80/tcp
yiialkalmi_php_1 php-fpm Up 9000/tcp
yiialkalmi_postgres_1 /docker-entrypoint.sh postgres Up 5432/tcp
yiialkalmi_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp
Run Code Online (Sandbox Code Playgroud)
这里的容器:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
315567db2dff yiialkalmi_nginx "nginx -g 'daemon off" 18 hours ago Up 3 hours 0.0.0.0:80->80/tcp, 443/tcp yiialkalmi_nginx_1
53577722df71 yiialkalmi_php "php-fpm" 18 hours ago Up 3 hours 9000/tcp yiialkalmi_php_1
40e39bd0329a postgres:latest "/docker-entrypoint.s" 18 hours ago Up 3 hours 5432/tcp yiialkalmi_postgres_1
5cc47477b72d redis:latest "docker-entrypoint.sh" 19 hours ago Up 3 hours 6379/tcp yiialkalmi_redis_1
Run Code Online (Sandbox Code Playgroud)
这是我的docker-compose.yml:
app:
image: ubuntu:16.04
volumes:
- .:/var/www/html
nginx:
build: ./docker/nginx/
ports:
- 80:80
links:
- php
volumes_from:
- app
volumes:
- ./docker/nginx/conf.d:/etc/nginx/conf.d
php:
build: ./docker/php/
expose:
- 9000
links:
- postgres
- redis
volumes_from:
- app
postgres:
image: postgres:latest
volumes:
- /var/lib/postgres
environment:
POSTGRES_DB: project
POSTGRES_USER: project
POSTGRES_PASSWORD: project
redis:
image: redis:latest
expose:
- 6379
Run Code Online (Sandbox Code Playgroud)
Alk*_*ris 74
docker exec -it yiialkalmi_postgres_1 psql -U project -W project project
Run Code Online (Sandbox Code Playgroud)
一些解释
docker exec -it
用于对正在运行的容器运行命令的命令.该it标志打开TTY互动.基本上它会导致连接到终端.如果你想打开bash终端,你可以这样做docker exec -it yiialkalmi_postgres_1 bash
yiialkalmi_postgres_1
容器名称(您可以使用容器ID,在您的情况下将是40e39bd0329a)psql -U project -W project
执行到正在运行的容器的命令
U 用户
W 密码project 要连接的数据库.这些是你在这里指定的
environment:
POSTGRES_DB: project
POSTGRES_USER: project
POSTGRES_PASSWORD: project
Run Code Online (Sandbox Code Playgroud)
小智 28
使用 docker 配置 Postgres 容器后,使用以下命令打开 bash 终端:
docker exec -it <containerID>(postgres container name / ID) bash
Run Code Online (Sandbox Code Playgroud)
切换到Postgres用户:
su - postgres
Run Code Online (Sandbox Code Playgroud)
然后运行:
psql
Run Code Online (Sandbox Code Playgroud)
它将打开 Postgres 的终端访问。
小智 9
您可以使用 docker-compose 通过键入以下内容进入 postgres 容器内部
docker-compose exec postgres bash
Run Code Online (Sandbox Code Playgroud)
知道postgres是服务的名称。将其替换为docker-compose 文件中Postgresql 服务的名称。
如果您有许多 docker-compose 文件,则必须添加要用于执行命令的特定 docker-compose.yml 文件。请改用以下命令。
docker-compose -f < specific docker-compose.yml> exec postgres bash
Run Code Online (Sandbox Code Playgroud)
例如,如果您想使用名为local.yml 的 docker -compose 文件运行命令,这里的命令将是
docker-compose -f local.yml exec postgres bash
Run Code Online (Sandbox Code Playgroud)
然后,使用 psql 命令并使用 -d 标志指定数据库名称,并使用 -U 标志指定用户名
psql -U <database username you want to connect with> -d <database name>
Run Code Online (Sandbox Code Playgroud)
巴姆!!!!!你在。
这对我有用:
转到 bash :
docker exec -it <container-name> bash
Run Code Online (Sandbox Code Playgroud)
来自 bash :
psql -U <dataBaseUserName> <dataBaseName>
Run Code Online (Sandbox Code Playgroud)
或者只是这个单线:
docker exec -it <container-name> psql -U <dataBaseUserName> <dataBaseName>
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
如果要在容器中还原数据库,可以执行此操作
docker exec -i app_db_1 psql -U postgres < app_development.back
Run Code Online (Sandbox Code Playgroud)
别忘了添加-i
:)
如果您正在运行“postgres”容器:
docker run -it --rm --link postgres:postgres postgres:9.6 sh -c "exec psql -h \$POSTGRES_PORT_5432_TCP_ADDR -p \$POSTGRES_PORT_5432_TCP_PORT -U postgres"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47697 次 |
| 最近记录: |