Dockerfile 中的密码

Passwords in Dockerfile

如何避免 Dockerfile 中 P@55w0rd 值的冗余?

FROM microsoft/mssql-server-linux:2017-latest as sqlbase 
WORKDIR /usr/src/app 
COPY ./sql-scripts /usr/src/app 
ENV MSSQL_SA_PASSWORD=P@55w0rd 
ENV ACCEPT_EULA=Y 
RUN /opt/mssql/bin/sqlservr --accept-eula & sleep 10 \
    && /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'P@55w0rd' -i ./init.sql \
    && pkill sqlservr

您可以在 Dockerfile 中使用 ENVARG

对于 ex,您可以在 Dockerfile 中使用如下所示的 ARG:

FROM busybox    
ARG user
USER $user

当您使用 ARG 时,您必须在构建 docker 图像时传递值:

docker build --build-arg user=what_user 

您还可以在 Dockerfile 中使用如下所示的 ENV:

FROM ubuntu
ENV CONT_IMG_VER hello
RUN echo $CONT_IMG_VER

您可以参考this了解更多信息。

一般来说,我不会直接在 Dockerfile 中输入任何密码,原因有二:

  • 让您的 Dockerfile 过时,迫使您在每次更改密码时构建一个新映像。
  • 应以更安全的方式处理密码或任何其他敏感信息(这取决于您的用例)。

在这个特殊情况下(这似乎是一个非生产案例)。一起使用 ENV 和 ARG 将是最好的方法:

ARG MSQL_SERVER_VERSION=2017-latest
FROM microsoft/mssql-server-linux:$MSQL_SERVER_VERSION as sqlbase

WORKDIR /usr/src/app
COPY ./sql-scripts /usr/src/app

ARG MSSQL_SA_PASSWORD=P@55w0rd
ENV MSSQL_SA_PASSWORD $MSSQL_SA_PASSWORD

ENV ACCEPT_EULA=Y
RUN /opt/mssql/bin/sqlservr --accept-eula & sleep 10 \
    && /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $MSSQL_SA_PASSWORD -i ./init.sql \
    && pkill sqlservr

MSSQL_SA_PASSWORD 作为 ARG 并将其值分配给 MSSQL_SA_PASSWORD 环境变量使您的 Dockerfile 更加灵活。这也让您可以在 RUN 命令中使用它以避免冗余。

您可以在 Dockerfile reference.

中详细了解 ENVARG(及其范围)的工作原理