OpenSSL命令在Dockerfile Run中不起作用

时间:2020-05-18 13:28:13

标签: docker dockerfile

我是Docker的新手。我正在尝试通过一些基本操作来加深我的理解。我有一个非常基本的Web应用程序,我已经创建了该应用程序,并想为其创建一个Dockerfile。我想做的一件事是让Web应用程序通过https交付。我想使用“让我们加密”。刚开始时,我在Let's Encrypt的网站instructions上找到了为本地开发创建证书的工具。

我想将其作为Dockerfile的一部分。

我将以下内容添加到我的Dockerfile中:

RUN openssl req \
-x509 \
-out localhost.crt \
-keyout localhost.key \
-newkey rsa:2048 \
-nodes \
-sha256 \
-subj "/CN=localhost" \
-extensions EXT \
-config <(printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

不过,每当我对此文件运行docker build命令时,都会收到以下错误消息。

Step 12/18 : RUN openssl req -x509 -out localhost.crt -keyout localhost.key -newkey rsa:2048 -nodes -sha256 -subj "/CN=localhost" -extensions EXT -config <(printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")
 ---> Running in 079b3085beba
/bin/sh: 1: Syntax error: "(" unexpected
The command '/bin/sh -c openssl req -x509 -out localhost.crt -keyout localhost.key -newkey rsa:2048 -nodes -sha256 -subj "/CN=localhost" -extensions EXT -config <(printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")' returned a non-zero code: 2

由于我的简单应用程序是dotnet应用程序,因此基本映像为FROM mcr.microsoft.com/dotnet/core/aspnet:3.1。这是基于3.1.4-buster-slim(一个debian容器)构建的图像。

然后我运行docker run -it mcr.microsoft.com/dotnet/core/aspnet:3.1,以便可以在该根容器上访问shell,然后可以将上述命令复制并粘贴到终端中,并且效果很好。

我在Windows机器上运行Windows的Docker,因此我认为可能由于Windows和Linux之间的行尾不同而出现错误。我确保Dockerfile上的所有行结尾均为LF而不是CRLF,并且仍然遇到相同的错误。 Dockerfile是UTF-8编码,据我所知,它也是Linux的标准。

我不知道为什么收到此错误。我需要对命令或dockerfile进行哪些更改才能使上述命令作为Dockerfile构建的一部分正常工作?

1 个答案:

答案 0 :(得分:1)

感谢@ michaeldel,我能够理解发生了什么问题。

经过一些搜索,我发现在一个人的Dockerfile中,可以指定要使用的shell。我已将Dockerfile更新为以下内容,并且现在一切正常。

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime
SHELL ["/bin/bash", "-c"]
RUN echo "$(openssl version)"
RUN openssl req \
-x509 \
-out localhost.crt \
-keyout localhost.key \
-newkey rsa:2048 \
-nodes \
-sha256 \
-subj "/CN=localhost" \
-extensions EXT \
-config <(printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")