如何将参数传递给 docker 运行 入口点?
How do you pass arguments to docker run entrypoint?
>docker run --entrypoint "dotnet test" api-tests
这表示在路径变量中找不到可执行文件。
>docker run --entrypoint "dotnet" api-tests
这有效但什么也没做。
如何传递多个参数?
例如dotnet test UnitTests.csproj --logger trx;LogFileName=/tests/test-results.trx
图像名称之后的任何内容替换任何已定义的 CMD 并作为参数发送到入口点。
所以如果你定义了一个入口点,你想将 'dotnet test' 传递给,你会做
docker run api-tests dotnet test
例如 alpine/curl 图像,它使用您传递的参数运行 curl。
docker run --rm alpine/curl -s https://www.google.com/
将获取 Google 的首页。参数只是-s https://www.google.com/
。该图像以 curl
作为入口点,因此您无需指定它。
把它们加到最后就行了。
对于 ENTRYPOINT
它添加到 dockerfile 中指定的任何内容。
如果使用 CMD
,它将替换它。
所以使用:
docker run api-tests test
如果你的 dockerfile 中有 ENRTYPOINT dotnet
。
或者:
docker run api-tests dotnet test
如果你的 dockerfile 中有 CMD this-will-be-replaced
如果你需要docker run --entrypoint
命令,只有第一个shell字(实际container-side二进制到运行)在那里。其余参数必须跟在图像名称之后,作为 docker run
命令语法中的“命令”参数。
docker run \
--entrypoint dotnet \
api-tests \
test UnitTests.csproj --et=cetera
但是,您可以设计图像以避免需要它。如果图像使用 CMD
声明其主要命令而不是 ENTRYPOINT
,那么您可以类似地在 docker run
命令的“命令”部分提供覆盖命令。
CMD ["dotnet", "MyApp.dll"] # and not ENTRYPOINT
docker run --rm api-tests \
dotnet test UnitTests.csproj --et=cetera
我倾向于为以 exec "$@"
结尾的包装脚本保留 ENTRYPOINT
,因此它仍然 运行 是 CMD
,或者对于 FROM scratch
图像,其中除了图像中的单个二进制文件之外几乎不可能 运行 任何东西。
>docker run --entrypoint "dotnet test" api-tests
这表示在路径变量中找不到可执行文件。
>docker run --entrypoint "dotnet" api-tests
这有效但什么也没做。
如何传递多个参数?
例如dotnet test UnitTests.csproj --logger trx;LogFileName=/tests/test-results.trx
图像名称之后的任何内容替换任何已定义的 CMD 并作为参数发送到入口点。
所以如果你定义了一个入口点,你想将 'dotnet test' 传递给,你会做
docker run api-tests dotnet test
例如 alpine/curl 图像,它使用您传递的参数运行 curl。
docker run --rm alpine/curl -s https://www.google.com/
将获取 Google 的首页。参数只是-s https://www.google.com/
。该图像以 curl
作为入口点,因此您无需指定它。
把它们加到最后就行了。
对于 ENTRYPOINT
它添加到 dockerfile 中指定的任何内容。
如果使用 CMD
,它将替换它。
所以使用:
docker run api-tests test
如果你的 dockerfile 中有 ENRTYPOINT dotnet
。
或者:
docker run api-tests dotnet test
如果你的 dockerfile 中有 CMD this-will-be-replaced
如果你需要docker run --entrypoint
命令,只有第一个shell字(实际container-side二进制到运行)在那里。其余参数必须跟在图像名称之后,作为 docker run
命令语法中的“命令”参数。
docker run \
--entrypoint dotnet \
api-tests \
test UnitTests.csproj --et=cetera
但是,您可以设计图像以避免需要它。如果图像使用 CMD
声明其主要命令而不是 ENTRYPOINT
,那么您可以类似地在 docker run
命令的“命令”部分提供覆盖命令。
CMD ["dotnet", "MyApp.dll"] # and not ENTRYPOINT
docker run --rm api-tests \
dotnet test UnitTests.csproj --et=cetera
我倾向于为以 exec "$@"
结尾的包装脚本保留 ENTRYPOINT
,因此它仍然 运行 是 CMD
,或者对于 FROM scratch
图像,其中除了图像中的单个二进制文件之外几乎不可能 运行 任何东西。