微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vscode 开发容器环境变量没有暴露给 docker-compose

如何解决vscode 开发容器环境变量没有暴露给 docker-compose

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

解决方法

根据documentation

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

您可以使用“environment”键将环境变量从您的 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。