Docker:我怎样才能让sqlite数据库更改持久化到数据库文件?

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数据库文件是在local-db目录,但我似乎没有正确使用VOLUME命令。 任何想法如何可以有数据库更改的SQLite数据库文件保存?

我不介意在构build之前或之后安装音量。

我也试着运行下面的命令

 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_。 -]“ 被允许。 如果您打算传递主机目录,请使用绝对path。

编辑:使用/absolutepath/local-dbpath/absolutepath/local-db而不是相对path./local-db

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

你是对的。 Docker不允许在命令行上使用相对path。

运行你的docker使用绝对path:

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

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

如果你想使用相对path,你可以使用docker-compose和“volumes”标签:

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

你可以试试这个configuration:

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

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

只是一个评论。 local-db(如果有)的内容将被replace为./local-dbpath(空)的内容。 如果容器有任何信息(初始化数据库)将是一个好主意,将其复制到docker cp或在入口点或命令shell脚本中包含任何init逻辑。