zoukankan      html  css  js  c++  java
  • 【Docker】windows-postgres

    第一次尝试,很多问题不懂,先这么记着,以后技术成长了再回来看看。

    环境:Windows(PowerShell)+Docker

    1、编写Dockerfile文件

    FROM postgres

    #ENV POSTGRES_USER postgres
    #ENV POSTGRES_PASSWORD postgres
    #ENV POSTGRES_DB postgres
    #COPY *.sql /docker-entrypoint-initdb.d/
    #WORKDIR /sql/
    #COPY flaskzlg.sql /sql
    #COPY initdb.sh /docker-entrypoint-initdb.d/

    ADD flaskzlg.sql /docker-entrypoint-initdb.d/

    #WORKDIR /docker-entrypoint-initdb.d/
    #RUN psql -U root -d postgres -f flaskzlg.sql

    #CMD ["psql", "-U", "root", "-d", "postgres", "-f", "flaskzlg.sql"]

    #EXPOSE 5432

    PS:Dockerfile文件,build的时候虽然没有报错,镜像也看起来正常,run容器的时候也没有报错,但是docker ps中没有新建的容器,这个时候大概率是Dockerfile中的某一个命令有问题;

    上面的 CMD RUN 都会导致容器起不起来。目前还不知道为什么。

    上面的ENV设置了没有效果,psql执行会报错,CMD的方式执行也不行,换成initdb.sh也不行;

    2、build镜像

    docker build -f ./Dockerfile -t pg7 .

    PS:先进入到Dockerfile所在目录

    3、新建容器

    docker run --name pg9002 -itd -p 9002:5432 -e POSTGRES_PASSWORD=123456 -e PGDATA=/data/ -e POSTGRES_USER=postgres -e POSTGRES_DB=postgres -v /var/lib/postgresql/oy_PostgreSQL_1.0.0_data:/var/lib/postgresql/data pg2

    PS:-itd 后台运行,如果是-it 会占用shell  -e的几个参数设置了不生效,尝试了 docker create volume pgdata 然后 pgdata:XXXX,挂载不生效呢;

    4、查看容器是否启动

    docker container ls -a

    docker ps

    PS:停止容器 docker stop pg9002,删除容器 docker container rm pg9002,需要先stop再rm

    5、进入容器

    docker exec -it pg9002 bash

    PS:-itd后台运行,-it就是保持bash运行

    6、初始化数据库

    cd  /docker-entrypoint-initdb.d/

    root@acf2ed3331ff:/docker-entrypoint-initdb.d# psql -U root -d postgres -f flaskzlg.sql

    PS:Dockerfile里面,不生效,只能手动初始化

    7、使用root登录数据库shell

    root@acf2ed3331ff:/docker-entrypoint-initdb.d# psql -U postgres -d postgres -W

    PS:root账号没有密码,所以password:直接回车就行;

    查看pg版本:select version(); 

    查看数据库列表:l 

    查看user:select * from user;

    切换数据库:c postgres

    修改root密码:alter user postgres with password '123'; 主要是方便外部访问;

    新建postgres用户并授权:

    create user postgres with password 'postgres';
    GRANT ALL PRIVILEGES ON DATABASE postgres TO postgres;
    GRANT ALL PRIVILEGES ON TABLE address TO postgres;
    GRANT ALL PRIVILEGES ON TABLE users TO postgres;
    GRANT ALL PRIVILEGES ON TABLE post TO postgres;

    PS:比如新建sequence时,如果没有指定模式,必须使用root用户才能访问 postgres虽然有其他权限,但是新增数据时就会因为sequnce而新增失败,权限控制很重要;

    退出:q , root用户 输入exit也行;

     本来想实现持久化的,也想实现build的时候就能够初始化,结果目标完全没有达成,尴尬至极。

    遗留问题:本地使用Pycharm启动Flask项目,使用root账号链接pg9002数据库,新增非常慢,目前还不知道怎么调优呢。

  • 相关阅读:
    2016CCPC东北地区大学生程序设计竞赛 1003 HDU5924
    2016CCPC东北地区大学生程序设计竞赛 1001 HDU5922
    Codeforces Round #375 (Div. 2) D
    linux开发缩写
    unity实现玻璃效果
    商业智能在公安交通管理领域的应用
    unity shaderlab Blend操作
    某中国500强企业BI系统成功应用案例
    Unity 5.X扩展编辑器之打包assetbundle
    unity描边效果
  • 原文地址:https://www.cnblogs.com/flydkPocketMagic/p/14934198.html
Copyright © 2011-2022 走看看