Dotnet Docker:/bin/sh: 1: [dotnet,: 找不到

7

我使用 Dockerfile 成功构建了镜像,但是当我尝试从构建镜像运行新容器时,出现以下错误:

Error : /bin/sh: 1: [dotnet,: not found

请问我应该怎么解决这个问题?

Docker 运行命令:

docker run --rm -it -p 8080:80 furkaandogan/myapp:0.1

Dockerfile:

FROM microsoft/aspnetcore:1.1
ARG source
WORKDIR /app
ENV ASPNETCORE_URLS http://*:80
EXPOSE 80
COPY ./publish/myapp .
ENTRYPOINT ["dotnet", "myapp.dll"]

如果您是在Visual Studio中构建图像,则此链接可能会有所帮助:https://dev59.com/0lcP5IYBdhLWcg3w39o-#43720639 - Ilya Chumakov
请不要将解决方案编辑到问题中 - 这样做会使社区无法审查与问题本身不同的建议解决方案(甚至是OP的建议解决方案)。分享解决方案的适当方式是使用“添加答案”链接,就像您所做的那样。 - Charles Duffy
4个回答

6
我是一名有用的助手,可以为您翻译文本。

我遇到了类似的问题。在我的情况下,问题出在Dockerfile中的入口点语句上。我在两个参数“dotnet”和“dll的url”之间缺少了一个逗号

之前:

CMD ["dotnet" "url to dll"]

应用修复后:
CMD ["dotnet", "url for dll"]

与主题无关,问题已经解决。我遇到了与构建上下文权限相关的问题。 - Muhammet Furkan DOĞAN
1
缺少逗号、错误的引号或任何其他无效的 JSON 都可能会导致问题中的错误消息。 - BMitch
1
当在 ENTRYPOINT / CMD 行中使用单引号而不是双引号时,我也遇到了这个错误。 - Scott Weldon
我因为语句末尾有注释而得到了这个错误。 - Quinn
将ENTRYPOINT中的单引号更改为双引号对我有效。 - sharooque

2

您的Dockerfile的入口行上有一些东西,触发了docker将其视为无效json,并退回到对字符串的shell执行。从您粘贴的内容看起来是正确的,因此建议检查是否存在智能引号或者在字符串末尾可能存在Windows换行符等特殊字符。


1
问题在于docker忽略文件不允许复制地址。
我通过将地址添加到docker忽略文件或使用允许的文件地址来解决了这个问题。
旧的dockerignore配置:
*
!obj/Docker/publish/*
!obj/Docker/empty/

新的dockerignore配置。
  *
    !obj/Docker/publish/*
    !obj/Docker/empty/
    !publish/myapp

1
如果您通过恢复以前的.dockerignore文件来重现“错误:/bin/sh:1:[dotnet,:未找到]”,我会感到非常惊讶,但毫无疑问它会导致不同的错误。 - BMitch
这实际上是我得到的最好的答案。因为我正在Jenkins上检查我的日志,而我最后一次遇到这个错误实际上是当我向这个项目添加了一个.gitignore文件时。 - Muzi Jack
但是将那个gitconfig代码放在上面,并没有改变我的构建过程,我仍然得到相同的错误。 - Muzi Jack

1
以上的回答非常清晰,但我按照上述方法将我的CMD [ 'node', 'app.mjs' ]更改为CMD [ "node", "app.mjs" ],确保我添加了逗号,但仍然出现了相同的问题。
在我尝试了一会儿之后,我开始思考,也许我需要重新构建docker文件,所以我再次运行了docker build .。哇,这次它成功了!
这是一个新手的错误!就像当我对Java repo进行更改但没有重新构建Java repo时,错误仍然会发生一样。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接