【问题标题】:VSCode throws error when setting PATH environment variable in devcontainer.json在 devcontainer.json 中设置 PATH 环境变量时 VSCode 抛出错误
【发布时间】:2020-02-10 03:27:21
【问题描述】:

我的项目中有以下devcontainer.json 文件。

当我尝试在容器中打开 VSCode 时,它​​会崩溃。容器构建成功,但在启动过程中会发出以下日志。当我删除环境变量配置时,容器启动并保持运行良好。

根据Advanced Container Configuration 的 Visual Studio Code 文档,我按照示例在 dev 容器内配置环境变量。

问题:如何在devcontainer.json 文件中正确配置PATH 环境变量?

devcontainer.json

{
    "name": "Ubuntu 18.04 & Git",
    "dockerFile": "Dockerfile",
    "settings": { 
        "terminal.integrated.shell.linux": "/bin/bash"
    },
    "containerEnv": {
        "PATH": "${containerEnv:PATH}:/root/.customfolder/bin/"
    }
}

日志

6499 ms] Successfully built 096d41dceada
[6503 ms] Successfully tagged vsc-asdf-73cee28d5205fdd4a6063fc596248885:latest
[6506 ms] Start: Run: git rev-parse --show-toplevel
[6533 ms] Start: Starting container
[6533 ms] Start: Run: docker run -a STDOUT -a STDERR --mount type=bind,source=/Users/username/git/asdf,target=/workspaces/asdf,consistency=cached --mount source=/Users/username/.aws/credentials,target=/root/.aws/credentials,type=bind -l vsch.quality=stable -l vsch.remote.devPort=0 -l vsch.local.folder=/Users/username/git/asdf -e PATH=${containerEnv:PATH}:/root/.customfolder/bin/ --entrypoint /bin/sh vsc-pulumi-73cee28d5205fdd4a6063fc596248885 -c echo Container started ; while sleep 1; do :; done
[6852 ms] /bin/sh: 1: sleep: not found
[6852 ms] Container started
[6873 ms] Start: Inspecting container
[6879 ms] Start: Run in container: uname -m
[7031 ms] Start: Run in container: cat /etc/passwd
[7035 ms] Shell server terminated (code: 1, signal: null)

Error response from daemon: Container 8e0f6eeb22c358b0dfd8f1c1410c10b382ea66aa432e7e400a4564671619046f is not running

设置容器时出错

环境

  • MacOS Catalina
  • Docker 桌面 2.2.0.0
  • Microsoft Visual Studio 代码 1.42.0
  • VSCode 远程容器扩展 0.101.0

【问题讨论】:

  • 不管怎样,我在使用我的一个开发容器升级到 VS Code 1.42.0 后遇到了问题。我收到类似的错误。这个容器以前工作得很好。这是在带有 Docker CE 19.03.3~3-0~ubuntu-disco 的 Ubuntu Eoan 上。 [6453 ms] 开始:检查容器 [6457 ms] 开始:在容器中运行:uname -m [6584 ms] 开始:在容器中运行:cat /etc/passwd [6588 ms] Shell 服务器终止(代码:137,信号:空)
  • 经过进一步测试,这似乎是由我在 Dockerfile 中使用的“CMD”选项引起的(不知道为什么它之前有效)。我完全删除了该选项,我的开发容器现在可以工作了。
  • @shthead 嗯,我的CMD 中根本没有CMD 指令。感谢您分享任何一种方式。

标签: visual-studio-code


【解决方案1】:

您应该能够将属性从 containerEnv 更改为 remoteEnv 以解决问题。

只有remoteEnv 属性支持引用现有的容器环境变量。 containerEnv 属性类似于 Docker CLI 的 -e,因此在创建容器之前进行评估。当您的 Dockerfile 本身依赖于设置的某些环境变量时,这主要是有用的(尽管您可以根据需要修改 Dockerfile 中的 PATH)。

对于其他一切,remoteEnv 是自 VS Code 和所有子进程(如终端)以来的必经之路。由于这是在容器创建后评估的,因此您可以按照示例说明更新路径。

"remoteEnv": {
    "PATH": "${containerEnv:PATH}:/some/other/path",
    "MY_REMOTE_VARIABLE": "some-other-value-here",
    "MY_REMOTE_VARIABLE2": "${localEnv:SOME_LOCAL_VAR}"
}

【讨论】:

  • 我的Dockerfile 确实取决于设置的环境变量,所以听起来containerEnv 理论上是正确的方法,根据您的描述。但是,因为containerEnv 的工作方式类似于-e,所以我不能附加到容器的$PATH。因此,我需要使用我的一种解决方法。
【解决方案2】:
"containerEnv": {
        "PATH": "${localEnv:PATH}:/workspaces/v8/depot_tools"
}

我认为这就是你所需要的。 localEnv 这里指的是容器环境。

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 2012-10-01
    • 1970-01-01
    • 2011-02-14
    • 2014-04-23
    • 2014-12-03
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多