這里是 Docker 新手。我正在嘗試創建一個基本的 Dockerfile,在其中運行一個 python 腳本,該腳本通過 psycopg2 在 postgres 中運行一些查詢。我目前在我的環境變數中設定了一個 pgpass 檔案,這樣我就可以運行這些工具而無需在代碼中提供密碼。我正在嘗試在 Docker 中復制它。我在本地有窗戶。
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"]
這是我在 Dockerfile 中嘗試過的。我試圖復制我的 pgpassfile 并將其設定為我的環境變數。抱歉,如果我的正斜杠/反斜杠錯誤或語法錯誤。我對 Docker、Linux 等非常陌生。
任何幫助或替代方案將不勝感激
uj5u.com熱心網友回復:
最好在運行時將秘密傳遞到容器中,而不是在構建時將秘密包含在映像中。這意味著Dockerfile不需要知道有關此值的任何資訊。
例如
$ export PGPASSWORD=<postgres password literal>
$ docker run -e PGPASSWORD <image ref>
現在在該示例中,我使用了 PGPASSFILEPGPASSWORD的替代方法。如果您使用的是檔案,則執行此操作會稍微復雜一些,但這將是這樣的:
該計劃將在運行時將憑據安裝為卷。
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 容器中設定敏感值的想法
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478874.html
標籤:Python PostgreSQL 码头工人
上一篇:SQL選擇所有關聯都沒有空值的行
