【问题标题】:vscode dev container environment variables not exposing to docker-composevscode dev 容器环境变量不暴露给 docker-compose
【发布时间】:2022-03-03 19:53:34
【问题描述】:

我的docker-compose.yml 看起来像这样

version: "3.8"
services: 
  vscode:
    volumes:
      - ..:/workspace:cached
      - $SSH_AUTH_SOCK:/ssh-agent
      - /var/run/docker.sock:/var/run/docker.sock
    environment: 
      - SSH_AUTH_SOCK=/ssh-agent

问题是 vscode 不想提供任何可能性来做与docker-compose run --env ... 等效的操作,因此我只剩下

WARNING: The SSH_AUTH_SOCK variable is not set. Defaulting to a blank string.

有什么方法可以让我在不使用.env 文件或类似文件的情况下将我的变量从我的主机公开到开发容器?

【问题讨论】:

    标签: docker visual-studio-code docker-compose vscode-remote vscode-devcontainer


    【解决方案1】:

    我昨天在 github 上打开了一个问题。结果是如果你使用 WSL,那么你需要通过你的 ~/.profile 或 ~/.bash_profile 导出这个变量。

    我们正在使用非交互式登录 shell 来探测 WSL 中的环境变量并将其用作“本地”变量。

    https://github.com/microsoft/vscode-remote-release/issues/5806

    【讨论】:

      【解决方案2】:

      我刚刚遇到了类似的问题,所以这可能会有所帮助。

      我会运行以下命令:

      export VARIABLE=VALUE
      sudo docker-compose up
      

      问题是我以用户身份导出环境变量,然后以 sudo 运行 docker-compose,因此它不会具有相同的环境变量。

      这可以通过将自己添加到 docker 组来解决,这样你就可以在没有 sudo 的情况下运行

      或将变量导出为root(不推荐)

      【讨论】:

      • 这个问题是针对 VS 代码开发容器的。不特定于 docker-compose。似乎最终解决了这个问题,请参阅:傻瓜的答案
      【解决方案3】:

      通过容器从主机公开环境变量,按照documentation

      您可以使用“环境”键将环境变量从 shell 直接传递到服务的容器,方法是不给它们一个值,就像 docker run -e VARIABLE ... 一样:

      web:
       environment:
         - DEBUG
      

      容器中DEBUG 变量的值取自运行 Compose 的 shell 中相同变量的值。

      关于SSH_AUTH_SOCK,你应该看看SSH Agent forwarding inside docker compose container

      示例

      是的,问题是即使这样做,环境变量也没有正确暴露。

      使用变量DEBUG 的简单服务。

      services:
        test:
          image: busybox
          command: ["echo", "${DEBUG}"]
          environment:
            - DEBUG
      

      在不导出变量的情况下使用它,它不起作用,输出中会显示警告。

      # running the service
      docker-compose up
      
      # WARNING: The DEBUG variable is not set. Defaulting to a blank string.
      # Starting d-compose-env_test_1 ... done
      # Attaching to d-compose-env_test_1
      # test_1  | 
      # d-compose-env_test_1 exited with code 0
      

      现在在运行之前在主机上导出变量,它可以工作,打印变量的值。

      # exporting the variable
      export DEBUG=test
      # running the service
      docker-compose up
      
      # Recreating d-compose-env_test_1 ... done
      # Attaching to d-compose-env_test_1
      # test_1  | test
      # d-compose-env_test_1 exited with code 0
      

      【讨论】:

      • 对,问题是即使这样做,环境变量也没有被正确暴露。我成功地使用具有相同卷配置的 docker run 并且它工作但无法让它与 vscode devcontainers 一起使用
      • @Tero 我不明白为什么。我刚刚有一个可重复的例子。请尝试一下。
      • code.visualstudio.com/docs/remote/containers 在此处查看更多信息。通常我可以做你展示的例子,但在这里我必须搞砸code.visualstudio.com/docs/remote/devcontainerjson-reference等等。我知道环境变量是如何工作的。这是关于 vscode 开发容器和 vscode 未正确将 env vars 传递到 docker-compose 的问题
      猜你喜欢
      • 2020-02-23
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-24
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多