4

我的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文件或类似的东西的情况下将我的变量从我的主机公开到开发容器?

4

3 回答 3

0

我昨天在 github 上开了一个 issue。结果是,如果您使用 WSL,则需要通过 ~/.profile 或 ~/.bash_profile 导出此变量。

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

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

于 2021-11-02T11:15:37.133 回答
0

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

我会运行以下命令:

export VARIABLE=VALUE
sudo docker-compose up

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

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

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

于 2022-03-03T11:53:34.773 回答
-1

根据文档,通过容器从主机公开环境变量

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

web:
 environment:
   - DEBUG

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

具体而言SSH_AUTH_SOCK,您应该查看docker compose container 内的 SSH 代理转发

例子

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

使用变量的简单服务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
于 2021-01-15T19:43:16.243 回答