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 中使用 ENV
或 ARG
:
对于 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.
中详细了解 ENV
、ARG
(及其范围)的工作原理
如何避免 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 中使用 ENV
或 ARG
:
对于 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.
中详细了解ENV
、ARG
(及其范围)的工作原理