亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Dockerfile 中使用環境變量

在 Dockerfile 中使用環境變量

PHP
慕田峪7331174 2021-11-05 10:51:31
我在一個 php 項目中有一個 Dockerfile,我需要在執行過程中傳遞一個用戶和一個密碼來下載一個庫。用戶和密碼必須隱藏在生產環境或本地 .env 文件中。目前我只是嘗試本地選項,用戶和密碼為空。我使用了"${USER}"and ${USER},但不僅登錄失敗,而且當我打印變量時,它們變空了。我也試過把變量硬編碼,它工作正常,所以問題是變量不是從 .env 文件中檢索的。docker-compose 啟動如下version: '3'services:  server:    build:      context: .      dockerfile: docker/Server/Dockerfile    container_name: "server"    ports:      - 80:80      - 8888:8888    networks:      - network    env_file:      - .env    command: sh /start-workers.sh和 Dockerfile:FROM php:7.3-cli-alpine3.10RUN apk add --update## Dependencies#RUN apk add --no-cache --no-progress \    libzip-dev zip php7-openssl pkgconfig \    php-pear php7-dev openssl-dev bash \    build-base composer## Enable PHP extensions#RUN docker-php-ext-install bcmath sockets pcntl## Server Dependencies#RUN echo '' | pecl install swoole \    && echo "extension=swoole.so" >> /usr/local/etc/php/conf.d/swoole.ini## installation#WORKDIR /var/www/serviceCOPY . .RUN echo "START"RUN echo "${USER}"RUN echo "${PASSWORD}"RUN echo "END"RUN composer config http.libraries.com "${USER}" "${PASSWORD}" --global \    && composer install -n -o --prefer-dist --no-dev --no-progress --no-suggest \    && composer clear-cache \    && mv docker/Server/start-workers.sh /EXPOSE 80.env 開始和結束如下:APP_ENV=devAPP_SECRET=666666666666666...USER=userPASSWORD=password目前,如果我docker-compose up --build按如下方式執行輸出Step 10/15 : RUN echo "START" ---> Running in 329b1707c2abSTARTRemoving intermediate container 329b1707c2ab ---> 362b915ef616Step 11/15 : RUN echo "${USER}" ---> Running in e052e7ee686aRemoving intermediate container e052e7ee686a ---> 3c9cfd43a4dfStep 12/15 : RUN echo "${PASSWORD}" ---> Running in b568e7b8d9b4Removing intermediate container b568e7b8d9b4 ---> 26a727ba6842Step 13/15 : RUN echo "END" ---> Running in 726898b3eb42END我希望打印用戶和密碼,所以我知道我正在接收 .env 數據并且我可以使用它。
查看完整描述

2 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

您可以使用args來滿足您的要求。


這里的一個注意事項是:您不應該使用USERin.env作為關鍵字,因為它將被 bash 的默認環境覆蓋,USER這將使您的 dockerfile 無法獲得正確的值。


一個完整可行的最小示例如下,僅供參考:


碼頭工人/服務器/Dockerfile:


FROM php:7.3-cli-alpine3.10


ARG USER

ARG PASSWORD


RUN echo ${USER}

RUN echo ${PASSWORD}

.env(注意:你必須使用 USR,而不是這里的 USER):


USR=user

PASSWORD=password

docker-compose.yaml:


version: '3'


services:

  server:

    build:

      context: .

      dockerfile: docker/Server/Dockerfile

      args:

         - USER=${USR}

         - PASSWORD=${PASSWORD}

執行:


$ docker-compose build --no-cache

Building server

Step 1/5 : FROM php:7.3-cli-alpine3.10

 ---> 84d7ac5a44d4

Step 2/5 : ARG USER

 ---> Running in 86b35f6903e2

Removing intermediate container 86b35f6903e2

 ---> ee6a0e84c76a

Step 3/5 : ARG PASSWORD

 ---> Running in 92480327a820

Removing intermediate container 92480327a820

 ---> 1f886e8f6fbb

Step 4/5 : RUN echo ${USER}

 ---> Running in 8c207c7e6080

user

Removing intermediate container 8c207c7e6080

 ---> cf97b2cc0317

Step 5/5 : RUN echo ${PASSWORD}

 ---> Running in 7cbdd909826d

password

Removing intermediate container 7cbdd909826d

 ---> 6ab7987e080a

Successfully built 6ab7987e080a

Successfully tagged 987_server:latest


查看完整回答
反對 回復 2021-11-05
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

這里的問題是您ENV只能從運行階段訪問而不是build.

我建議你使用 buildargs例如:

build:
  context: .
  args:
    buildno: 1
    gitcommithash: cdc3b19


查看完整回答
反對 回復 2021-11-05
  • 2 回答
  • 0 關注
  • 157 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號