Docker - 如何在 postgres 容器中 运行 psql 命令?
Docker - How can run the psql command in the postgres container?
我想在 postgres 图像中使用 psql 以便 运行 对数据库进行一些查询。
但不幸的是,当我附加到 postgres 容器时,出现错误 psql command is not found...
对我来说,我如何在容器中 运行 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
这里是容器:
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
这是我的 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
docker exec -it yiialkalmi_postgres_1 psql -U project -W project
一些解释
docker exec -it
命令 运行 对 运行ning 容器的命令。 it
标志打开交互式 tty。基本上它会导致附加到终端。如果你想打开 bash 终端,你可以这样做
docker exec -it yiialkalmi_postgres_1 bash
yiialkalmi_postgres_1
容器名称(您可以改用容器 ID,在您的情况下为 40e39bd0329a
)
psql -U project -W project
执行到 运行ning 容器
的命令
U
用户
W
告诉psql连接时需要提示用户输入密码。 此参数是可选的。如果没有此参数,则会进行额外的连接尝试,通常会发现需要密码,请参阅 PostgreSQL docs。
project
您要连接的数据库。当 -d
参数是第一个非选项参数时,不需要将其标记为 dbname,请参阅文档: -d
“相当于将 dbname 指定为第一个非选项参数在命令行上。"
这里是你指定的
environment:
POSTGRES_DB: project
POSTGRES_USER: project
POSTGRES_PASSWORD: project
如果您有 运行 "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"
如果您需要在容器中恢复数据库,您可以这样做:
docker exec -i app_db_1 psql -U postgres < app_development.back
不要忘记添加 -i
。
:)
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
createdb -O docker docker &&\
您可以使用 docker-compose 进入 postgres 容器,输入以下内容
docker-compose exec postgres bash
知道postgres是服务的名称。将其替换为您 docker-compose 文件中 Postgresql 服务 的名称。
如果您有许多 docker-compose 文件,则必须添加要用来执行命令的特定 docker-compose.yml 文件。请改用以下命令。
docker-compose -f < specific docker-compose.yml> exec postgres bash
例如,如果您想要 运行 带有 docker 的命令 - 编写名为 local.yml 的文件,这里的命令将是
docker-compose -f local.yml exec postgres bash
然后,使用 psql 命令并使用 -d 标志指定数据库名称,并使用 -U 标志指定用户名
psql -U <database username you want to connect with> -d <database name>
呜呜呜!!!!!!你在。
这对我有用:
转到bash:
docker exec -it <container-name> bash
来自 bash :
psql -U <dataBaseUserName> <dataBaseName>
或者只是这个 one-liner :
docker exec -it <container-name> psql -U <dataBaseUserName> <dataBaseName>
有帮助吗?
我们可以使用终端 sh 或 bash 进入容器,
docker run -it <container id | name> <sh | bash>
如果假设它是 sh,
psql -U postgres
会起作用
刚刚启动了本地测试,不确定 -c
是否是您从 cli 获得的结果。
docker run -it --rm --name psql-test-connection -e PGPASSWORD=1234 postgres psql -h kubernetes.docker.internal -U awx -c "\conninfo"
You are connected to database "awx" as user "awx" on host "kubernetes.docker.internal" (address "192.168.65.4") at port "5432".
使用 docker 配置 Postgres 容器后,使用以下命令打开 bash 终端:
docker exec -it <containerID>(postgres container name / ID) bash
切换到 Postgres 用户:
su - postgres
然后运行:
psql
它将打开 Postgres 的终端访问。
我想在 postgres 图像中使用 psql 以便 运行 对数据库进行一些查询。 但不幸的是,当我附加到 postgres 容器时,出现错误 psql command is not found...
对我来说,我如何在容器中 运行 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
这里是容器:
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
这是我的 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
docker exec -it yiialkalmi_postgres_1 psql -U project -W project
一些解释
docker exec -it
命令 运行 对 运行ning 容器的命令。it
标志打开交互式 tty。基本上它会导致附加到终端。如果你想打开 bash 终端,你可以这样做
docker exec -it yiialkalmi_postgres_1 bash
yiialkalmi_postgres_1
容器名称(您可以改用容器 ID,在您的情况下为40e39bd0329a
)
的命令psql -U project -W project
执行到 运行ning 容器U
用户W
告诉psql连接时需要提示用户输入密码。 此参数是可选的。如果没有此参数,则会进行额外的连接尝试,通常会发现需要密码,请参阅 PostgreSQL docs。project
您要连接的数据库。当-d
参数是第一个非选项参数时,不需要将其标记为 dbname,请参阅文档:-d
“相当于将 dbname 指定为第一个非选项参数在命令行上。"
这里是你指定的
environment:
POSTGRES_DB: project
POSTGRES_USER: project
POSTGRES_PASSWORD: project
如果您有 运行 "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"
如果您需要在容器中恢复数据库,您可以这样做:
docker exec -i app_db_1 psql -U postgres < app_development.back
不要忘记添加 -i
。
:)
RUN /etc/init.d/postgresql start &&\
psql --command "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\
createdb -O docker docker &&\
您可以使用 docker-compose 进入 postgres 容器,输入以下内容
docker-compose exec postgres bash
知道postgres是服务的名称。将其替换为您 docker-compose 文件中 Postgresql 服务 的名称。
如果您有许多 docker-compose 文件,则必须添加要用来执行命令的特定 docker-compose.yml 文件。请改用以下命令。
docker-compose -f < specific docker-compose.yml> exec postgres bash
例如,如果您想要 运行 带有 docker 的命令 - 编写名为 local.yml 的文件,这里的命令将是
docker-compose -f local.yml exec postgres bash
然后,使用 psql 命令并使用 -d 标志指定数据库名称,并使用 -U 标志指定用户名
psql -U <database username you want to connect with> -d <database name>
呜呜呜!!!!!!你在。
这对我有用:
转到bash:
docker exec -it <container-name> bash
来自 bash :
psql -U <dataBaseUserName> <dataBaseName>
或者只是这个 one-liner :
docker exec -it <container-name> psql -U <dataBaseUserName> <dataBaseName>
有帮助吗?
我们可以使用终端 sh 或 bash 进入容器,
docker run -it <container id | name> <sh | bash>
如果假设它是 sh,
psql -U postgres
会起作用
刚刚启动了本地测试,不确定 -c
是否是您从 cli 获得的结果。
docker run -it --rm --name psql-test-connection -e PGPASSWORD=1234 postgres psql -h kubernetes.docker.internal -U awx -c "\conninfo"
You are connected to database "awx" as user "awx" on host "kubernetes.docker.internal" (address "192.168.65.4") at port "5432".
使用 docker 配置 Postgres 容器后,使用以下命令打开 bash 终端:
docker exec -it <containerID>(postgres container name / ID) bash
切换到 Postgres 用户:
su - postgres
然后运行:
psql
它将打开 Postgres 的终端访问。