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-db
path/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-db
path(空)的内容。 如果容器有任何信息(初始化数据库)将是一个好主意,将其复制到docker cp
或在入口点或命令shell脚本中包含任何init逻辑。