源文件已更新,但CMD不能反映

时间:2018-08-23 09:19:31

标签: docker go dockerfile

我是Docker的新手,正在尝试对我拥有的应用进行Docker化。这是我正在使用的dockerfile:

FROM golang:1.10

WORKDIR /go/src/github.com/myuser/pkg
ADD . .

RUN curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
RUN dep ensure

CMD ["go", "run", "cmd/pkg/main.go"]

我遇到的问题是,我将使用一些日志语句更新本地计算机上的源文件,重建映像,然后尝试在容器中运行它。但是,CMD(go run cmd/pkg/main.go)不会反映我所做的更改。

我查看了容器文件系统,发现源文件已更新并与本地文件匹配。但是当我在容器中运行go run cmd/pkg/main.go时,看不到添加的日志语句。

我在构建图像时尝试使用--no-cache选项,但这似乎无济于事。 golang图片或我的dockerfile设置是否有问题?

更新:我发现了问题。该问题与使用dep进行销售有关。 vendor文件夹中我的软件包的文件已过时,因为dep ensure是从github而不是从本地拉出它们。我将转向1.1,该版本支持go模块来解决此问题。

1 个答案:

答案 0 :(得分:0)

我看到几件事:

根据您的Dockerfile

  1. 也许您需要在dep init之前输入dep ensure
  2. 可能您需要检查main.go路径是否正确。

根据Docker哲学

  1. 以我的愚见,您应该使用docker build -t <your_image_name> .创建一个映像,并在其中执行您的Dockerfile,但不要使用CMD行。
  2. 我会在您的go run <your main.go>中执行您的docker run -d <your_image_name> go run <cmd/pkg/main.go>或您执行的命令。

如果出现问题,可以使用docker ps -a检查退出的容器,还可以使用docker logs <your_CONTAINER_name/id>检查日志

检查日志的其他方法是使用bash访问容器并手动执行go run

docker run -ti <your_image_name> bash
# go run blablabla