os.Lstat在基于ubuntu的Docker容器上的已装入卷中失败

os.Lstat在基于ubuntu的Docker容器上的已装入卷中失败

问题描述:

I have a docker container that uses go-bindata to compile a config. I run the docker container with

docker run -id \
    -v conf:/conf \
    -e CONF="/conf" \
    my-container

Then in the docker container, I install go-bindata, and run

RUN go-bindata -prefix $CONF -o $GOPATH/src/github.com/my/repo/dir/conf_generated.go $CW_CONF/config

And the output is

bindata: Failed to stat input path '/conf/config': lstat /conf/config: no such file or directory

This is the line that is causing the error. It is odd because when I enter the container and run the same command, it works. stat /conf/config also works (it knows the file is there). What is going on here? Why doesn't the install line work when the container is building?

我有一个使用 go-bindata code>编译配置的docker容器。 我使用 p>

  docker运行docker容器-id \
 -v conf:/ conf \
 -e CONF =“ / conf” \
 my-container  
  code>  pre> 
 
 

然后在docker容器中,安装go-bindata,然后运行 p>

  RUN go-bindata- 前缀$ CONF -o $ GOPATH / src / github.com / my / repo / dir / conf_genic.go $ CW_CONF / config 
  code>  pre> 
 
 

输出为 p>

  bindata:无法统计输入路径'/ conf / config':lstat / conf / config:没有这样的文件或目录
  code>  pre> 
 \  n 

是 导致错误。 这很奇怪,因为当我进入容器并运行相同的命令时,它可以工作。 stat / conf / config code>也可以工作(它知道文件在那里)。 这里发生了什么? 为什么在构建容器时安装行不起作用? p> div>

It looks like you have the bindata call declared in your Dockerfile. With the RUN prefix it's executed during build of the container when there is no volume yet mounted. If you use the CMD prefix it will run during execution of the container, then the volume is mounted and it should work.