【问题标题】:Using host environmental variables in docker-compose that are passed to DockerFile while using vscode在使用 vscode 时在 docker-compose 中使用传递给 DockerFile 的主机环境变量
【发布时间】:2021-12-30 16:06:04
【问题描述】:

我试图在我的 DockerFile 中使用 wget 来下载一个需要密码才能执行此操作的文件,所以在 docker-compose.yml 我尝试向 args 添加一个从主机读取变量并将其传递给 DockerFile 的变量但我无法弄清楚我在这里做错了什么。 整个过程在可视化代码工作室中运行

在 devcontainer.json 中

...
"containerEnv": {
    "${localEnv:PRIVATE_TOKEN}"
},
"remoteEnv": {
    "${localEnv:PRIVATE_TOKEN}"
},
...

.bashrc 内:

...
MY_PASSWORD='123'

在 Docker-Compose 中

version: '3.8'
services:
  my_service:
    image: ...
    build:
      ...
      args:
        MY_PASSWORD: ${MY_PASSWORD}
    ...

在 Dockerfile 内部:

ARG MY_PASSWORD
RUN wget --progress=dot:giga -O my_file.tgz remot_link_to_my_file --header "MY_PASSWORD: $MY_PASSWORD"

在 Docker-compose 中,我将 ${MY_PASSWORD} 更改为实际值,它确实有效。

【问题讨论】:

  • 你在使用wsl(2)和vscode吗?你也混淆了数组和对象的语法。
  • 我在archlinux上使用vscode,你能详细说明那部分混淆了吗?
  • 见下面的答案。这就是 yaml 对象语法。没有等号。
  • 如果你使用 vscode + wsl 2 那么 bashrc 不是来自 devcontainer。你需要把它放在.profile中。
  • 我不使用 WSL,只使用 vscode 和很好的语法,它只是在这里而不是在我的真实代码中:)

标签: docker visual-studio-code docker-compose environment-variables


【解决方案1】:

您的 args 配置错误或过时。这按预期工作:

docker-compose.yml

version: '3.8'

services:
  web:
    build:
      context: .
      args:
        MY_PASSWORD: ${MY_PASSWORD}

Dockerfile

from ubuntu
ARG MY_PASSWORD
RUN mkdir /tmp/$MY_PASSWORD
RUN ls -la /tmp

Arg 被传递并用于创建文件夹:

【讨论】:

    猜你喜欢
    • 2018-01-08
    • 1970-01-01
    • 2020-10-23
    • 2018-12-18
    • 2020-11-07
    • 2023-04-11
    • 1970-01-01
    • 2020-04-30
    • 2018-02-06
    相关资源
    最近更新 更多