我是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模块来解决此问题。
答案 0 :(得分:0)
我看到几件事:
根据您的Dockerfile
dep init
之前输入dep ensure
main.go
路径是否正确。根据Docker哲学
docker build -t <your_image_name> .
创建一个映像,并在其中执行您的Dockerfile,但不要使用CMD
行。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