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(使用前将#替换为@)