【问题标题】:Docker: How can I have sqlite db changes persist to the db file?Docker:如何让 sqlite db 更改持久保存到 db 文件?
【发布时间】:2017-09-14 18:10:14
【问题描述】:
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:来自守护程序的错误响应:创建 ./local-db:“./local-db”包括本地卷名的无效字符,仅“[a-zA-Z0-9][a-zA-Z0 -9_.-]”是允许的。如果您打算传递主机目录,请使用绝对路径。

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

【问题讨论】:

标签: sqlite docker dockerfile


【解决方案1】:

您没有在 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

你可以试试这个配置:

  • 将 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 路径的内容(空)。如果容器有任何信息(已初始化的数据库),最好使用 docker cp 复制它,或者在入口点或命令 shell 脚本中包含任何初始化逻辑。

【讨论】:

  • 使用绝对路径,虽然不能使用./local-db
  • 使用 docker-compose ,主机路径可以相对于 docker-compose.yml 文件,这是一个很好的做法,例如卷:- ./db/local-db:/go/src/初学者应用程序/本地数据库
  • 我应该使用 docker-compose 即使我只有 1 个容器吗?
  • docker-compose 是一个很好的 docker 解决方案。即使您有一个 docker 容器,也可以使用它。我改进了我的回复,试图帮助你
  • 这可以使用绑定挂载来完成吗?按照官方绑定挂载教程docs.docker.com/get-started/06_bind_mounts,我无法让数据持久化
猜你喜欢
  • 1970-01-01
  • 2015-08-08
  • 2011-05-02
  • 2017-02-13
  • 2016-10-31
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多