问题描述
我的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
文件或类似文件的情况下将我的变量从我的主机公开到开发容器吗?
解决方法
,通过容器从主机公开环境变量
您可以使用“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