当前位置: 首页 > 知识库问答 >
问题:

VSCode远程容器-使用docker-compose未在开发容器上安装的扩展

易波涛
2023-03-14

我在使用“远程容器”在dev容器中安装扩展时遇到问题。我不知道这是一个错误,我这方面的配置不正确,或预期的行为。下面是我的当前配置,两个文件都位于项目的根文件夹中。

docker-compose.yml

version: "3.7"

services:
  api:
    image: node:12
    restart: always
    ports:
      - ${API_PORT}:3000
    volumes:
      - .:/usr/app
      - /usr/app/node_modules
    working_dir: /usr/app
    command: bash -c "yarn && yarn dev"

devcontainer先生。json

{
    "dockerComposeFile": "docker-compose.yml",
    "service": "api",
    "workspaceFolder": "/usr/app",
    "extensions": [
        "eamodio.gitlens",
        "formulahendry.auto-rename-tag",
        "coenraads.bracket-pair-colorizer-2",
        "kumar-harsh.graphql-for-vscode",
        "esbenp.prettier-vscode",
        "ms-vscode.vscode-typescript-tslint-plugin",
        "visualstudioexptteam.vscodeintellicode"
    ]
}

中列出的扩展列表。devontainer.json是我希望安装在开发容器中的扩展。感谢任何帮助!

共有2个答案

阴高寒
2023-03-14

此答案仅适用于网络环境需要使用代理服务器的情况。

根据“在容器内开发”的“已知限制”。。。

本地代理设置不会在容器内重复使用,这可能会阻止扩展工作,除非配置了适当的代理信息(例如,具有适当代理信息的全局HTTP_代理或HTTPS_代理环境变量)。

我可以通过在devcontainer中添加runArgs来设置代理环境变量。json':“--net=host”,“--env=https_proxy=(您的_proxy_主机:端口)”

或者,如果代理不需要主机访问权限,则只需附加到'。devcontainer/Dockerfile':

ENV https_proxy=(your_proxy_host:port)

以这种方式启用代理访问对于从您的应用程序进行网络访问也是必要的(不仅仅是对于vscode扩展)。

另请参见:如何将环境变量传递给Docker容器?

孙财
2023-03-14

根据Visual Studio代码文档,这两个文件需要位于目录中。devcontainer位于工作区根目录中。

我在公司代理后工作时,在安装扩展时仍然遇到问题。解决方案是让容器访问代理服务器:

如果在本地计算机上使用类似Cntlm的身份验证代理,请将其配置为在172.17.0.1(Docker界面)上侦听。然后为容器定义http_proxyhttps_proxy环境变量。例如,在 中。json:

"containerEnv": { 
  "http_proxy": "http://172.17.0.1:3128",
  "https_proxy": "http://172.17.0.1:3128"
}

或者在docker-compose.yaml

services:
  devcontainer:
    environment:
      http_proxy: http://172.17.0.1:3128
      https_proxy: http://172.17.0.1:3128

或者配置docker compose。yaml要使容器使用主机网络:

services:
  devcontainer:
    network_mode: host

然后您可以将与主机上使用的相同的代理变量传递到容器中。例如,在docker-compose.yaml中:

services:
  devcontainer:
    environment:
      http_proxy: $http_proxy
      https_proxy: $https_proxy

如果在网络中使用的不是本地代理,而是远程代理,则无论容器的网络配置如何(主机或默认),都可以执行后者。

 类似资料:
  • 问题内容: 首次运行高山docker容器并尝试进行openssh安装时,会发生以下情况: 应该如何安装openssh? 问题答案: 跑第一。以下粘贴包含一个完整的示例:

  • 命令输出: 加载插件:fastestmirror,langpacks从缓存的主机文件加载镜像速度*base:repo1.ash.innosscale.net*epel:mirror.us.leaseweb.net*extras:mirror.rackspace.com*更新:ftp.osuosl.org解析依赖项还有未完成的事务。您可以考虑首先运行yum-complete-transaction,

  • 我正在docker容器中设置一个应用程序。我希望这个应用程序能够与localstack堆栈容器localstack文档连接。当我运行时,容器会成功启动。我可以运行docker-compose文件中未包含的独立java应用程序,它将成功连接到localstack容器。但与localstack一起启动的应用程序无法连接。我看过docker文档和localstack文档,我想不出如何让这些东西彼此通信。

  • 问题内容: 我一直在关注几种不同的教程以及官方教程,但是每当我尝试在容器中安装PostgreSQL时,我都会收到以下消息 我在SO和整个互联网上浏览了几个问题,但是没有运气。 问题答案: 问题是您的应用程序/项目正在尝试访问HOST机器(不是docker容器)中的postgres套接字文件。 要解决这个问题,要么必须在使用该标志为postgres容器设置端口时明确要求进行tcp / ip连接,要么

  • 我一直在关注几个不同的教程以及官方教程,但是每当我试图在容器中安装PostgreSQL时,我都会收到以下消息 我在SO和整个互联网上看了几个问题,但没有运气。

  • 问题内容: 我正在尝试部署使用docker-compose构建的应用程序,但是感觉好像我朝着完全错误的方向前进。 我的一切工作都在本地进行-通过适当的网络和主机启动我的应用程序。 我希望能够在生产机器上运行容器和网络的相同配置,而只是使用不同的文件。 我当前的工作流程如下所示: 在这一点上,我希望当它们到达那里时能够再次运行,但这试图根据文件重建容器。 我有一种明显的失落感。我是否应该通过完整的应