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

您可以尝试以下配置:
  • 将Dockerfile放在目录中(例如/opt/docker/myproject)
  • 在如下所示的相同路径中创建docker-compose.yml文件:


  • 在同一路径中执行docker-compose up -d myproject

  • 您的数据库应存储在/opt/docker/myproject/local-db

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

    09-25 23:16
    查看更多