Docker:我怎样才能将sqlite db更改持久保存到db文件中?

时间:2017-09-11 03:38:39

标签: sqlite docker dockerfile

FROM golang:1.8

ADD . /go/src/beginnerapp

RUN go get -u github.com/gorilla/mux

RUN go get github.com/mattn/go-sqlite3

RUN go install beginnerapp/

VOLUME /go/src/beginnerapp/local-db

WORKDIR /go/src/beginnerapp

ENTRYPOINT /go/bin/beginnerapp

EXPOSE 8080

sqlite db文件位于local-db目录中,但我似乎没有正确使用VOLUME命令。有关如何对sqlite db文件进行db更改的任何想法仍然存在?

我不介意在构建之前或之后安装卷。

我也试过运行以下命令

user@cardboardlaptop:~/go/src/beginnerapp$ docker run -p 8080:8080 -v ./local-db:/go/src/beginnerapp/local-db beginnerapp

docker:来自守护程序的错误响应:create ./local-db:" ./ local-db"包括本地卷名的无效字符,仅包括" [a-zA-Z0-9] [a-zA-Z0-9 _.-]"被允许。如果您打算传递主机目录,请使用绝对路径。

编辑:使用/absolutepath/local-db代替相对路径./local-db

1 个答案:

答案 0 :(得分:3)

您不是在Dockerfile中挂载卷。 VOLUME告诉docker这些目录上的内容可以通过docker run --volumes-from

挂载

你是对的。 Docker不允许命令行上的卷上的相对路径。

使用绝对路径运行您的泊坞窗:

docker run -v /host/db/local-db:/go/src/beginnerapp/local-db

您的数据库将保留在主机文件/host/db/local-db

如果你想使用相对路径,你可以使用docker-compose和" volume"标记:

volumes:
  - ./local-db:/go/src/beginnerapp/local-db

您可以尝试以下配置:

  • 将Dockerfile放在一个目录中(例如/opt/docker/myproject
  • 在相同的路径中创建docker-compose.yml文件,如下所示:
version: "2.0"
services:
  myproject:
    build: .
    volumes:
      - "./local-db:/go/src/beginnerapp/local-db"
  • 在同一路径中执行docker-compose up -d myproject

您的数据库应存储在/opt/docker/myproject/local-db

只是评论。 local-db(如果有)的内容将被./local-db path(empty)的内容替换。如果容器有任何信息(初始化数据库),最好用docker cp复制它,或者在入口点或命令shell脚本中包含任何init逻辑。