我有以下Dockerfile
FROM rikorose/gcc-cmake
RUN git clone https://github.com/hect1995/UBIMET_Challenge.git
WORKDIR /UBIMET_Challenge
RUN mkdir build
WORKDIR build
#RUN apt-get update && apt-get -y install cmake=3.13.1-1ubuntu3 protobuf-compiler
RUN cmake ..
RUN make
CMD ["./ubimet /UBIMET_Challenge/data/1706221600.29 output.csv"]
即使它说它在构建时也不执行最后一行(或者它执行不正确),就好像您在运行最后一行一样,它应该生成2个文件,一旦我使用以下命令检查它们就不会生成:
docker run -t -i trial /bin/bash
尽管如此,如果我进入容器,然后从那里运行:
./ubimet /UBIMET_Challenge/data/1706221600.29 output.csv
它会生成文件,那么为什么在构建时却不生成文件?
答案 0 :(得分:3)
CMD
是启动容器时要运行的默认命令。你压倒一切
通过将/bin/bash
传递到docker run
来实现。
将CMD
更改为RUN
(以在构建时运行脚本),或者运行docker run
,而不使用尾随命令(在启动容器时运行)。
答案 1 :(得分:1)
您使用的CMD
错误。 CMD
has 3 forms,您所使用的都不是:
CMD
CMD
指令具有三种形式:
CMD ["executable","param1","param2"]
(执行表单,这是首选形式)CMD ["param1","param2"]
(作为ENTRYPOINT的默认参数)CMD command param1 param2
(shell形式)
您可以像这样使用CMD
:
CMD ["./ubimet", "/UBIMET_Challenge/data/1706221600.29", "output.csv"]