Dockerfile中的密码

问题描述 投票:1回答:2

如何避免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
docker passwords dockerfile
2个回答
1
投票

一般来说,我不会直接在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命令中使用它以避免冗余。

您可以了解更多关于ENVARG(及其范围)如何在Dockerfile reference中工作的信息。


2
投票

您可以在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获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.