尝试向 Docker 图片提供 PGPASS
Trying to supply PGPASS to Docker Image
这里是 Docker 的新手。我正在尝试创建一个基本的 Docker 文件,其中我 运行 一个 python 脚本 运行 通过 psycopg2 在 postgres 中进行一些查询。我目前在我的环境变量中设置了一个 pgpass 文件,这样我就可以 运行 这些工具而无需在代码中提供密码。我正在尝试在 Docker 中复制它。我的本地有 windows。
FROM datascienceschool/rpython as base
RUN mkdir /test
WORKDIR /test
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY main_airflow.py /test
RUN cp C:\Users\user.name\AppData\Roaming\postgresql\pgpass.conf /test
ENV PGPASSFILE="test/pgpass.conf"
ENV PGUSER="user"
ENTRYPOINT ["python", "/test/main_airflow.py"]
这是我在 Docker 文件中尝试过的。我试图复制我的 pgpassfile 并将其设置为我的环境变量。如果我有 forward/backslashes 错误或语法错误,我深表歉意。我对 Docker、Linux 等很陌生
如有任何帮助或替代方案,我们将不胜感激
最好在运行时将您的秘密传递到容器中,而不是将秘密包含在图像中 build-time。这意味着 Dockerfile
不需要知道关于这个值的任何信息。
例如
$ export PGPASSWORD=<postgres password literal>
$ docker run -e PGPASSWORD <image ref>
现在在那个例子中,我使用了 PGPASSWORD
,即 an alternative to PGPASSFILE。如果您使用的是文件,则执行此操作会稍微复杂一些,但应该是这样的:
计划将在运行时将凭据作为卷装载。
FROM datascienceschool/rpython as base
RUN mkdir /test
WORKDIR /test
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY main_airflow.py /test
ENV PGPASSFILE="/credentials/pgpass.conf"
ENV PGUSER="user"
ENTRYPOINT ["python", "/test/main_airflow.py"]
正如我上面所说,我们不想在图像中包含秘密。我们将指示文件 将在图像中 的位置,但实际上我们还没有包含它。
现在,当我们启动映像时,我们将在映像中指定的位置安装一个包含文件的卷,/credentials
$ docker run --mount src="<host path to directory>",target="/credentials",type=bind <image ref>
我没有对此进行测试,因此您可能需要调整确切的路径等,但这是如何在 docker 容器中设置敏感值的想法
这里是 Docker 的新手。我正在尝试创建一个基本的 Docker 文件,其中我 运行 一个 python 脚本 运行 通过 psycopg2 在 postgres 中进行一些查询。我目前在我的环境变量中设置了一个 pgpass 文件,这样我就可以 运行 这些工具而无需在代码中提供密码。我正在尝试在 Docker 中复制它。我的本地有 windows。
FROM datascienceschool/rpython as base
RUN mkdir /test
WORKDIR /test
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY main_airflow.py /test
RUN cp C:\Users\user.name\AppData\Roaming\postgresql\pgpass.conf /test
ENV PGPASSFILE="test/pgpass.conf"
ENV PGUSER="user"
ENTRYPOINT ["python", "/test/main_airflow.py"]
这是我在 Docker 文件中尝试过的。我试图复制我的 pgpassfile 并将其设置为我的环境变量。如果我有 forward/backslashes 错误或语法错误,我深表歉意。我对 Docker、Linux 等很陌生
如有任何帮助或替代方案,我们将不胜感激
最好在运行时将您的秘密传递到容器中,而不是将秘密包含在图像中 build-time。这意味着 Dockerfile
不需要知道关于这个值的任何信息。
例如
$ export PGPASSWORD=<postgres password literal>
$ docker run -e PGPASSWORD <image ref>
现在在那个例子中,我使用了 PGPASSWORD
,即 an alternative to PGPASSFILE。如果您使用的是文件,则执行此操作会稍微复杂一些,但应该是这样的:
计划将在运行时将凭据作为卷装载。
FROM datascienceschool/rpython as base
RUN mkdir /test
WORKDIR /test
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY main_airflow.py /test
ENV PGPASSFILE="/credentials/pgpass.conf"
ENV PGUSER="user"
ENTRYPOINT ["python", "/test/main_airflow.py"]
正如我上面所说,我们不想在图像中包含秘密。我们将指示文件 将在图像中 的位置,但实际上我们还没有包含它。
现在,当我们启动映像时,我们将在映像中指定的位置安装一个包含文件的卷,/credentials
$ docker run --mount src="<host path to directory>",target="/credentials",type=bind <image ref>
我没有对此进行测试,因此您可能需要调整确切的路径等,但这是如何在 docker 容器中设置敏感值的想法