如何在 VSCode Remote dev 容器中处理多个“network_mode”?

6 docker docker-compose vscode-remote vscode-devcontainer

我希望在开发容器中运行一个应用程序、数据库和 Redis 服务,这样我就能够在容器、应用程序和 Windows 上访问我的数据库和 Redis,这就是当前我想要的应用程序的工作方式和数据库:

.devcontainer.json:

{
  "name": "Node.js, TypeScript, PostgreSQL & Redis",
  "dockerComposeFile": "docker-compose.yml",
  "service": "akira",
  "workspaceFolder": "/workspace",
  "settings": {
    "typescript.tsdk": "node_modules/typescript/lib",
    "sqltools.connections": [
      {
        "name": "Container database",
        "driver": "PostgreSQL",
        "previewLimit": 50,
        "server": "database",
        "port": 5432,
        "database": "akira",
        "username": "ailuropoda",
        "password": "melanoleuca"
      }
    ],
    "editor.formatOnSave": true,
    "editor.codeActionsOnSave": {
      "source.fixAll": true
    }
  },
  "extensions": [
    "aaron-bond.better-comments",
    "dbaeumer.vscode-eslint",
    "esbenp.prettier-vscode",
    "mtxr.sqltools",
    "mtxr.sqltools-driver-pg",
    "redhat.vscode-yaml"
  ],
  "forwardPorts": [5432],
  "postCreateCommand": "npm install",
  "remoteUser": "node"
}
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml:

version: "3.8"

services:
  akira:
    build:
      context: .
      dockerfile: Dockerfile
    command: sleep infinity
    env_file: .env
    volumes:
      - ..:/workspace:cached

  database:
    image: postgres:latest
    restart: unless-stopped
    environment:
      POSTGRES_USER: ailuropoda
      POSTGRES_DB: akira
      POSTGRES_PASSWORD: melanoleuca
    ports:
      - 5432:5432
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:alpine
    tty: true
    ports:
      - 6379:6379

volumes:
  pgdata:
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

ARG VARIANT="16-bullseye"
FROM mcr.microsoft.com/vscode/devcontainers/typescript-node:0-${VARIANT}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我已经尝试实现我想要使用的目标,networks但没有成功,我的问题是:如何将 Redis 添加到我的服务中,同时仍然能够在应用程序内和 Windows 上连接 Redis 和数据库?

Dar*_*him 0

如果您在 WSL 上使用 Docker,我发现当进程正在侦听 ::1 时,我经常无法连接,但当显式地将端口绑定到 127.0.0.1 时,可以通过 Windows 访问该服务。

所以像

ports:
  - 127.0.0.1:5432:5432
Run Code Online (Sandbox Code Playgroud)

可能有用