emz*_*ero 22 docker docker-compose visual-studio-code vscode-remote
我有这个多容器项目,由 3 个 NestJS 和 1 个 dotnet5.0 应用程序组成。除了应用程序之外,该项目还依赖于 RabbitMQ 和 InfluxDB 服务(作为纯 docker 镜像运行)
该docker-compose文件如下所示:
version: '3.8'
services:
influxdb:
image: influxdb:2.0
container_name: influxdb
ports:
- '8086:8086'
expose:
- '8086'
volumes:
- ./data/influxdb2/data:/var/lib/influxdb2
- ./data/influxdb2/config:/etc/influxdb2
rabbitmq:
hostname: 'rabbitmq'
image: rabbitmq:3-management
container_name: rabbitmq
ports:
- '15672:15672'
- '5672:5672'
microservice1:
image: microservice1
container_name: microservice1
depends_on: [rabbitmq, influxdb]
build:
context: .
dockerfile: ./apps/microservice1/Dockerfile
microservice2:
image: microservice2
container_name: microservice2
depends_on: [rabbitmq, influxdb]
build:
context: .
dockerfile: ./apps/microservice2/Dockerfile
microservice3:
image: microservice3
container_name: microservice3
depends_on: [rabbitmq, influxdb]
build:
context: .
dockerfile: ./apps/microservice3/Dockerfile
microservice4:
image: microservice4
container_name: microservice4
depends_on: [rabbitmq, influxdb]
build:
context: .
dockerfile: ./apps/microservice4/Dockerfile
Run Code Online (Sandbox Code Playgroud)
我想移动整个开发人员。环境到新的 VS Code devcontainers,但我不太了解如何使用依赖项(例如这里的rabbitmq和influxdb)。
理想情况下,我会在包含 Nodejs 和 dotnet SDK 的 devcontainer 中打开存储库,以便能够在开发过程中运行微服务。但是,我不想将 influxdb 和rabbitmq 安装到 devcontainer 中,因为我想利用现有的(且方便的)docker 镜像。
问题是,一旦我在 devcontainer 内打开存储库,就无法从内部与 docker-compose 交互(因为 docker/docker-compose 在 devcontainer 内不可用)。
是否可以从容器内部与主机上的 Docker 引擎交互?所以我可以简单地有一个dev.sh脚本,可以简单地使用uprabbitmq和influxdb依赖项,然后启动我想要运行的任何微服务?
也许我完全错了,但我找不到关于如何混合 VS Code devcontainers 和 docker-compose 文件(具有基于图像的依赖项)的明确解释。
mar*_*gas 20
vscode 只能使用一项服务作为 IDE 运行的“工作区”。就像在本地工作时一样,您在 IDE 上运行,而其他服务则在其他容器中运行。
您当前的服务似乎都不适合作为 IDE 工作区,因此您必须添加该服务。这将“就像”您的主机,但在容器中。
您可以使用多个撰写文件,这样您就可以避免更改当前文件docker-compose.yml,同时能够添加新服务。
所以,第一部分:
docker-compose.yml文件(也许docker-compose.workspace.yml:).devcontainer.json这两个文件并定义工作区服务:...
"dockerComposeFile": [
"docker-compose.yaml",
"docker-compose.workspace.yaml"
],
"service": "workspace",
...
Run Code Online (Sandbox Code Playgroud)
好的。这样就为您提供了工作区容器和侧面的其他所有内容。这就引出了问题的另一部分:
是否可以从容器内部与主机上的 Docker 引擎交互?所以我可以简单地有一个 dev.sh 脚本,它可以简单地启动rabbitmq和influxdb依赖项,然后启动我想要运行的任何微服务?
首先,如果您需要 docker 和 docker-compose 命令,则必须安装软件包。有些图像内置了它们,有些则没有。您可以使用自己的图像等。
但这还不够。您的工作区容器不知道主机的 docker。但这很容易修复。只需添加一个卷挂载:
/var/run/docker.sock:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)
关于工作区服务。这样,vscode 将“看到”您主机的 docker 并对其进行操作。
请注意,它仍然是主机的 docker,因此根据您的操作,您可能会遇到路径等问题。
| 归档时间: |
|
| 查看次数: |
24452 次 |
| 最近记录: |