Docker卷关闭后,Docker卷不保留数据

时间:2018-07-04 10:15:42

标签: postgresql docker docker-compose

我正在使用docker compose合并2张图像(tomcat与我的应用程序和数据库-postgres)。

我的撰写文件如下:

version: '3'

services:
  tomcat:
    build: ./tomcat-img
    ports:
      - "8080:8080"
    depends_on:
      - "db"

  db:
    build: ./db-img
    volumes:
       - db-data:/var/lib/postgres/data
    ports:
      - "5433:5432"

volumes:
  db-data:

这是数据库映像的dockerfile:

FROM postgres:9.5-alpine
ENV POSTGRES_DB mydb
ENV POSTGRES_USER xxxx
ENV POSTGRES_PASSWORD xxxx
COPY init-db.sql /docker-entrypoint-initdb.d/

EXPOSE 5432
CMD ["postgres"]

接下来,我以docker-compose cli docker-compose -f docker-compose.yml up

开始我的容器

并使用以下命令运行psql工具:

docker exec -it container_id psql -d xxxx -U xxxx

并插入新记录。之后,我检查是否确实存在:

select * from my_table;

此后,我尝试停止docker撰写并使用以下命令删除容器:

docker-compose -f docker-compose.yml down

然后重新启动

docker-compose -f docker-compose.yml up

当我再次运行db容器的psql工具并在my_table中选择数据时,没有先前插入的记录...您能帮我解决它吗?我只需要一次用init-db.sql初始化数据库,然后使用该持久性存储。感谢您的回答。

1 个答案:

答案 0 :(得分:0)

在带有数据量的dockerized Postgresql中,我绑定到/ var / lib / postgresql而不是/ var / lib / postgres / data。尝试将撰写文件更改为

 <script type="text/javascript">
    const url="http://127.0.0.1/index.php?id=";
   let task = [];
   let task01 = function()
   {
        return new Promise( function(resolve , reject){
            $.ajax({
              url: url+1,
              context: document.body,
              success: function(){
                resolve('success');
                 console.log("01");
                }
           });
        })
   }
      task[0]= function(){
        new Promise( function(resolve , reject){
            $.ajax({
              url: url+2,
              context: document.body,
              success: function(){
                resolve('success');
                 console.log("02");
                }
           });
        })
      }


     task[1] = function(){
       new Promise( function(resolve , reject){
           $.ajax({
             url: url+3,
             context: document.body,
             success: function(){
               resolve('success');
                console.log("03");
               }
          });
       })
     }


    task01().then(function(value){
         Promise.all(task);
    })


</script>