【问题标题】:How to mount volumes with docker-compose in- and outside of a VSCode devcontainer?如何在 VSCode 开发容器内外使用 docker-compose 挂载卷?
【发布时间】:2020-12-17 15:22:52
【问题描述】:

场景

我正在处理的项目(一个 React 应用程序)使用 docker-compose 来设置它的后端、网络服务器和前端。我在 VSCode devcontainer(带有 Typescript 的节点)内工作。

我设置的 Docker 环境中的 Docker 似乎工作正常,我能够启动每个 Docker 容器,但我必须以以下方式调整代码,否则 Docker 无法找到指定的要挂载的卷。

设置

首先我需要在我的devcontainer.json 中设置一个remote environment variable

"remoteEnv": {
    // the original host directory which is needed for volume mount commands from inside the container (Docker in Docker)
    "LOCAL_WORKSPACE_FOLDER": "${localWorkspaceFolder}"
}

然后我在docker-compose.yaml 中使用这个环境变量,如下所示:

services: 

  webserver:
      build: 
          context: ./docker
          dockerfile: webserver/Dockerfile
      image: webserver
      container_name: webserver_nginx
      ports:
          - 8080:80
      volumes:
          -  ${LOCAL_WORKSPACE_FOLDER}/webserver:/etc/nginx/conf.d
          -  ${LOCAL_WORKSPACE_FOLDER}/build:/var/www/html
      restart: unless-stopped
      depends_on: 
        - backend

  backend:
      ...

问题

在我的机器上(以及我的同事也使用 VSCode 的机器上)一切正常。但是我有一些团队成员不使用 VSCode。当我提交调整后的 docker-compose.yaml 文件时,他们的设置不再起作用,反之亦然,如果他们再次调整文件以满足他们的需求。

问题

如何确保 Docker compose 在 VSCode 的 devcontainers 内外工作?

可能的解决方案?

  • 是否可以将环境变量设置为默认值?因为在我的情况下,如果项目未在 devcontainer 中打开,则应设置的实际值只是一个简单的点 (.)。因为当我在集成的 VSCode 终端内运行命令 echo ${LOCAL_WORKSPACE_FOLDER} 时,会打印出正确的路径。所以看起来VSCode只是设置了正常的环境变量?

  • (如果上面的假设是正确的)难道不能编写一个简单的 Bash 脚本install.sh 自动设置正确的路径吗? 这个脚本只能在运行期间运行一次项目的设置。这个文件长什么样子?

【问题讨论】:

  • 为什么不指定 './webserver' 作为卷?这也应该在你的 vscode 中工作......

标签: docker visual-studio-code docker-compose vscode-devcontainer


【解决方案1】:

Docker compose 允许变量的默认值:

${VARIABLE:-default} 如果 VARIABLE 未设置或 在环境中是空的。

见:https://docs.docker.com/compose/environment-variables/

对于你的例子,你可以使用:

${LOCAL_WORKSPACE_FOLDER:-.}

PS:我从来没有用过那个人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    相关资源
    最近更新 更多