【问题标题】:echo tells me my env vars are defined, but docker-compose tells me "variable is not set". How do I pass them to docker-compose?echo 告诉我我的环境变量已定义,但 docker-compose 告诉我“未设置变量”。如何将它们传递给 docker-compose?
【发布时间】:2021-01-30 00:06:48
【问题描述】:

我正在使用 Docker v19.03.13 。在我的 shell 中,我定义了一些环境变量 ...

davea$ echo $AZ_SQL_TP_SRVR
localhost
davea$ echo $AZ_SQL_TP_DB
myDB

我想在我的 docker-compose.yml 文件中引用这些内容,该文件位于...

version: "3.2"
services:

  sqlserver-db:
    build:
      context: ./
      args:
        - AZ_SQL_TP_SRVR=${AZ_SQL_TP_SRVR}
        - AZ_SQL_TP_PORT=1433
        - AZ_SQL_TP_DB=${AZ_SQL_TP_DB}
        - AZ_SQL_TP_USERNAME=${AZ_SQL_TP_USERNAME}
        - AZ_SQL_TP_PASSWORD=${AZ_SQL_TP_PASSWORD}
    container_name: sqlserver-db
    ports:
      - ${AZ_SQL_TP_PORT}:1433
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=${AZ_SQL_TP_PASSWORD}
      - TZ=${TZ}
    volumes:
      - ../../mydb/mypb:/sqlscripts
    tty: true
    command: /bin/bash entrypoint.sh

但是当我运行我的 docker 实例时,我收到这些警告,抱怨无法找到变量 ...

davea$ docker-compose up -d
WARNING: The AZ_SQL_TP_SRVR variable is not set. Defaulting to a blank string.
WARNING: The AZ_SQL_TP_DB variable is not set. Defaulting to a blank string.

我还需要做什么才能让我的 docker-compose 文件识别我在 shell 中定义的环境变量?

【问题讨论】:

  • 不知道 docker,但如果它在新的子 shell 中运行,它可能找不到 env 变量。在这种情况下,导出变量以便子 shell 也可以访问变量可能会有所帮助。

标签: docker shell docker-compose environment-variables


【解决方案1】:

正如 cmets 所提到的,您确实分配了AZ_SQL_TP_DB=myDB,这还不够。

您可以选择任何一个来使其工作。

  • 选项 1

    $ export AZ_SQL_TP_DB=myDB
    $ docker-compose up -d
    
  • 选项 2

    $ AZ_SQL_TP_DB=myDB docker-compose up -d
    

或者在docker-compose.yaml的同一文件夹中添加.env文件和下一个内容:

$ cat .env
AZ_SQL_TP_SRVR=localhost
AZ_SQL_TP_DB=myDB
$ docker-compose up -d

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 2020-02-23
    • 2022-11-10
    • 2017-09-18
    • 2018-08-23
    • 2021-11-27
    • 2019-06-06
    • 2019-09-11
    相关资源
    最近更新 更多