Docker - How can run the psql command in the postgres container?
我想在postgres映像中使用psql以便在数据库上运行一些查询。
但是不幸的是,当我连接到postgres容器时,出现了该错误,找不到psql命令...
对我来说,如何在容器中运行postgre sql查询或命令是一个谜。
如何在postgres容器中运行psql命令? (我是Docker世界中的新手)
我使用Ubuntu作为主机,但没有在主机上安装postgres,而是使用postgres容器。
1 2 3 4 5 6 7 8 | 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 |
这里的容器:
1 2 3 4 5 6 | 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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 |
1 | docker EXEC -it yiialkalmi_postgres_1 psql -U project -W project project |
一些解释
-
docker exec -it
用于对正在运行的容器运行命令的命令。it 标志打开一个交互式tty。基本上它将导致连接到终端。如果您想打开bash终端,可以执行此操作
-
yiialkalmi_postgres_1
容器名称(您可以改用容器ID,在您的情况下为40e39bd0329a ) -
psql -U project -W project
对正在运行的容器执行的命令 -
U 用户 -
W 密码 -
project 您要连接的数据库。
这些是您在这里指定的
1 2 3 4 | environment: POSTGRES_DB: project POSTGRES_USER: project POSTGRES_PASSWORD: project |
如果要在容器中还原数据库,可以执行此操作
1 | docker EXEC -i app_db_1 psql -U postgres < app_development.back |
不要忘记添加-i
:)
如果您正在运行" postgres"容器:
1 | 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" |
1 2 3 | RUN /etc/init.d/postgresql START &&\ psql --command"CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" &&\ createdb -O docker docker &&\ |
您可以使用docker-compose在postgres容器中输入以下内容
知道postgres是服务的名称。将其替换为docker-compose文件中的Postgresql服务的名称。
如果您有许多docker-compose文件,则必须添加要用于执行命令的特定docker-compose.yml文件。请使用以下命令。
例如,如果您要使用名为local.yml的docker-compose文件运行命令,则该命令将为
然后,使用psql命令并使用-d标志指定数据库名称,并使用-U标志指定用户名。
Baammm !!!!!你在。