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
答案 0 :(得分:3)
您不是在Dockerfile中挂载卷。 VOLUME告诉docker这些目录上的内容可以通过docker run --volumes-from
挂载你是对的。 Docker不允许命令行上的卷上的相对路径。
使用绝对路径运行您的泊坞窗:
docker run -v /host/db/local-db:/go/src/beginnerapp/local-db
您的数据库将保留在主机文件/host/db/local-db
如果你想使用相对路径,你可以使用docker-compose和" volume"标记:
volumes:
- ./local-db:/go/src/beginnerapp/local-db
您可以尝试以下配置:
/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
path(empty)的内容替换。如果容器有任何信息(初始化数据库),最好用docker cp
复制它,或者在入口点或命令shell脚本中包含任何init逻辑。