Docker:如何将 sqlite 数据库更改保留到数据库文件中?

2023-12-31

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 数据库文件的数据库更改吗?

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

我还尝试运行以下命令

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


你不是mountingDockerfile 中的卷。 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"
  • Execute docker-compose up -d myproject在同一条路径上。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker:如何将 sqlite 数据库更改保留到数据库文件中? 的相关文章

随机推荐