当前位置: 首页 > 知识库问答 >
问题:

Docker:入口点未执行

时同
2023-03-14

我有以下DockerFile:

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY ./entrypoint.sh ./app/
RUN chmod +x ./app/entrypoint.sh
CMD /bin/bash ./app/entrypoint.sh
ENTRYPOINT ["dotnet", "test.dll"]
Unhandled Exception: System.FormatException: Value for switch '/bin/bash ./app/entrypoint.sh' is missing.
Test          |    at Microsoft.Extensions.Configuration.CommandLine.CommandLineConfigurationProvider.Load()
Test          |    at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
Test          |    at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
Test          |    at Microsoft.AspNetCore.Hosting.WebHostBuilder.BuildCommonServices(AggregateException& hostingStartupErrors)
Test          |    at Microsoft.AspNetCore.Hosting.WebHostBuilder.Build()
Test          |    at Test.Program.Main(String[] args) in /app/Program.cs:line 19
Identity exited with code 139

这是什么意思:switch的值丢失了,我如何运行它?谢谢你的帮助

更新

请参阅此处:docker ASP.NET核心容器在mysql容器之后启动以获取更多信息。很抱歉有类似的第二个线程。请删除此线程

#!/bin/bash

set -e
echo -e "\nWaiting for the Database-Service..."
run_cmd="dotnet run --server.urls http://*:80"

until dotnet ef database update; do
>&2 echo "SQL Server is starting up"
sleep 1
done

>&2 echo "SQL Server is up - executing command"
exec $run_cmd
SQL Server is starting up
Test          | Did you mean to run dotnet SDK commands? Please install dotnet SDK from: 
Test          |   http://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

共有1个答案

滕项明
2023-03-14

正在发生的情况是,使用参数/bin/bash./app/entrypoint.sh启动dotnet test.dll。则test程序尝试解析这些参数并失败。这就是例外的意义所在。

您可能必须根据要实现的目标删除cmdentrypoint。如果entrypoint.sh要接收dotnet test.dll作为参数,则还可以交换cmdentrypoint参数。

 类似资料:
  • 我试图让我的docker db容器在创建时自动用数据集填充数据库。根据mariadb留档,卷中有一个文件夹可用于此目的。 我设置了我的文件来镜像我在StackOverflow上找到的示例,但是仍然无法执行我的SQL脚本。以下是我的文件的相关部分: 在文件,我有一个文件: 在每次测试迭代之前,我会清理所有旧的/缓存的Docker内容: 我发现这实际上并没有删除数据库卷。运行仍会显示过去存在的卷 Do

  • 假设我有以下Dockerfile: 命令使得在容器启动时启动。我还希望能够在容器启动时使用命令启动。但是,根据文档,Dockerfile中必须只有一个

  • 我正在从另一个设置了特定入口点的图像创建一个图像。但是,我希望我的图像有一个默认的。如何重置入口点? 我尝试了以下Dockerfile: 不幸的是,它不像默认的入口点那样工作,因为它需要引用命令。 如何在不引用的情况下使用命令?

  • 我的Dockerfile有一个在EntryPoint上运行的脚本。容器计划用我的代码所在的卷挂载运行,一旦容器用卷挂载运行,它需要运行几个命令。 docker run-itd-v/home/user/directory:/my-mount-dir build-container 注意:startup-script.sh包含应该在挂载的目录文件上运行的命令。

  • 是否有一种方法可以在Dockerfile入口点中将命令作为参数执行?我正在创建一个映像,该映像应该自动运行处理器的数量,即或。 有人设法得到这种工作流程吗?

  • 然而,这并不起作用,应用程序运行并不拾取这个挂载的属性文件,它使用的是封装在jar中的默认属性文件。但是当我进入已启动的容器并再次手动运行entrypoint cmd时,它通过拾取我挂载的文件而按预期工作。所以我想知道这是不是与mount如何使用entrypoint相关?或者我只是没有为这个案例正确地编写Dockerfile?