docker 安装postgre并使用php进行连接
一、创建postgre的容器
方法1: docker run 创建容器
docker run --network=你的network --name 容器名称 -v 你电脑本地文件地址:/var/lib/postgresql/data -e POSTGRES_PASSWORD=密码 -d -p 5432:5432 postgreseg:
docker run --network=lnmp_app-net --name pgtest -v /test/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 -d -p 5432:5432 postgres
1、若不知道已有那些network,可以通过下面的命令查看所有,NAME列就是你配置时填network时可选的内容,因为需要和php打通,所以network要填写和php容器一样的network
docker network ls
如果不知道php容器的network,则可以使用以下命令查看,在返回的JSON中能看到Networks下配置的network名叫lnmp_app-net,创建postgre的容器的时候就要指定network为lnmp_app-net
docker inspect 你的容器名称或者容器IDeg:查看容器名称为PHP的使用的那个 network
docker inspect php
2、如果一个network都不存在,可以选择重新创建l
docker network create [选项] <网络名称>
方法2 使用docker-compose.yml创建容器
创建docker-compose.yml文件,并进入该文件目录运行 docker-compose -up
version: '3.8'services:db:image: postgres:latestrestart: alwayscontainer_name: 你的容器名称environment:POSTGRES_PASSWORD: 你的密码ports:- "5432:5432"volumes:- 文件保存地址:/var/lib/postgresql/datanetworks:- network的名称
volumes:db-data:
networks:network的名称:driver: bridge示例:
version: '3.8'services:db:image: postgres:latestrestart: alwayscontainer_name: pgtestenvironment:POSTGRES_PASSWORD: 123123ports:- "5432:5432"volumes:- ./test/data:/var/lib/postgresql/datanetworks:- app-net
volumes:db-data:
networks:app-net:driver: bridge
创建好docker-compose.yml文件之后,在该文件同目录下运行下面的命令
docker-composer up -d
执行成功后就能在docker中看到一个名字为pgtest的容器了,需要注意的是,方法2执行完成之后,该容器是处于二级目录下的。
二、允许postgre从外部访问
找到创建容器时候,挂载在本地电脑的data文件夹,上面两个方法示例中都是保存在test/data文件下,在这个文件夹下
1、找到并打开pg_hbc.conf文件,输入以下内容,该内容是允许任何外部ip来访问,如果你要指定ip,则将0.0.0.0换成你要指定的IP
host all all 0.0.0.0/0 md5
2、在同样的文件夹下找到并打开postgresql.conf文件,并找到写有listen_addresses的这一行,并将其改为以下内容
listen_addresses = '*'
三、通过PHP进行访问postgre
需要注意的是,如果php和postgre是同一个Docker网络中的服务,host要写成服务名,而不是localhost或127.0.0.1,而此处的服务名就是指postgre容器的名称,因为上文演示时给postgre的容器命名为pgtest,所以此处的host=pgtest
$conn_string = "host=pgtest port=5432 dbname=test user=postgre password=123123";$dbconn = pg_connect($conn_string) or die('Could not connect');$result = pg_query($dbconn, $query);if ($result) {echo 'success';} else {echo "Error inserting data: " . pg_last_error($dbconn);}pgclose($dbconn);