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:来自守护程序的错误响应:create ./local-db:“./local-db”包含本地卷名的无效字符,只有“[a-zA-Z0-9] [a-zA-Z0-9_。 -]“被允许。如果要传递主机目录,请使用绝对路径。
编辑:使用
/absolutepath/local-db
而不是相对路径./local-db
最佳答案
您没有在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
您可以尝试以下配置:
/opt/docker/myproject
)docker-compose.yml
文件:docker-compose up -d myproject
。 您的数据库应存储在
/opt/docker/myproject/local-db
中只是一个评论。 local-db的内容(如果有)将被
./local-db
路径的内容(空)替换。如果容器具有任何信息(初始化的数据库),则最好使用docker cp
复制它,或者在入口点或命令 shell 脚本上包含任何初始化逻辑。