如果两者都使用JSON符号(如您的示例中),则Docker将ENTRYPOINT
和CMD
合并为单个命令行。
这是JSON符号:CMD [ "dotnet", "/app/netcore/Somename.dll"]
这是shell符号:CMD dotnet /app/netcore/Somename.dll
你需要知道的另一件事是,docker run ... <image_name> ...
后面跟着的内容被视为CMD
。
因此,总结一下:
命令行的常量(不可变)部分,例如dotnet foo.dll
,可以放在ENTRYPOINT
中。
变量部分,例如附加参数,您可以通过docker run
提供,并在Dockerfile
中将默认值放入CMD
中。
例如:
Dockerfile
...
ENTRYPOINT ["dotnet", "/app/netcore/Somename.dll"]
CMD ["--help"]
命令行 1:
docker run ... <your image name> --environment=Staging --port=8080
执行该命令将会运行 dotnet /app/netcore/Somename.dll --environment=Staging --port=8080
第二个命令行:
docker run ... <your image name>
将会产生dotnet /app/netcore/Somename.dll --help
。 --help
来自Dockerfile中定义的默认值。