Docker:如何将sqlite数据库更改持久保存到db文件?

irr*_*lar 4 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
Run Code Online (Sandbox Code Playgroud)

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

我不在乎该卷是在构建之前还是之后安装的。

我也尝试运行以下命令

user@cardboardlaptop:~/go/src/beginnerapp$ docker run -p 8080:8080 -v ./local-db:/go/src/beginnerapp/local-db beginnerapp
Run Code Online (Sandbox Code Playgroud)

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

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

Alf*_*nda 6

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

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

使用绝对路径运行docker:

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

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

如果要使用相对路径,则可以使用带有“ volumes”标签的docker-compose使其工作:

volumes:
  - ./local-db:/go/src/beginnerapp/local-db
Run Code Online (Sandbox Code Playgroud)

您可以尝试以下配置:

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

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

只是一个评论。local-db的内容(如果有)将被./local-dbpath 的内容(空)代替。如果容器具有任何信息(初始化的数据库),则最好docker cp在入口点或命令Shell脚本上复制它或在其中包含任何初始化逻辑。