Есть ли способ для двух контейнеров в VSCode взаимодействовать из разных проектов?

#docker #networking #visual-studio-code #containers

#docker #сеть #visual-studio-code #контейнеры

Вопрос:

У меня два разных узла.Проекты JS, которые я создал в VSCode. Иногда проекту A требуется выполнить вызов в проект B. Проект A выполняется на порту 60100. Проект B запущен на порту 60200. Когда я пытаюсь вызвать проект B с помощью http://localhost:60200 / Я получаю сообщение об ошибке транспортировки. Если я открою порт 60200 в конфигурациях обоих контейнеров (devcontainer.json), он выдаст ошибку, поскольку порт уже используется.

Я знаю, что мог бы использовать docker-compose и запускать их в одном проекте, но у них отдельные дома git и большую часть времени они автономны.

Могу ли я что-нибудь сделать, чтобы связать их? Может быть, использовать docker-compose для каждого отдельного, но использовать одно и то же сетевое имя в композиции? Позволит ли это им обмениваться данными?

Комментарии:

1. Используйте сети docker для соединения двух контейнеров друг с другом: docs.docker.com/network/network-tutorial-standalone

2. вам нужно будет включить другой проект как часть devcontainer.json (используйте docker-compose, а не один контейнер по умолчанию), потому что у вас может быть только один экземпляр, т.е. Если вы закроете редактор, он не будет поддерживать работу контейнеров

3. Вы заставили это работать? У меня аналогичная настройка (две папки git, два devcontainers, одно приложение должно получить доступ к другому через HTTP) и не может заставить его работать. Даже с внешней общей мостовой сетью. Есть какие-либо подсказки о том, что делать дальше?

Ответ №1:

Вот что я делаю (хотя я использую его, чтобы заставить мой devcontainer присоединиться к сети docker-compose, но должны применяться те же принципы)…

В моем devcontainer.json…

     "initializeCommand": "docker network inspect my_shared_network > /dev/null || docker network create my_shared_network --attachable",

    "runArgs": [
        "--network=my_shared_network",
    ],
  

Это создает именованную сеть, если ее еще нет, и дает указание VSCode использовать ее для devcontainer.

Возможно, вы захотите добавить, например, "--hostname=devcontainer-project-b" в runArgs, чтобы вы могли использовать это имя в своем URL.

Ответ №2:

Проект A может вызывать другой проект (проект B), работающий в другом VSCode:

http://workspace:60200

 // Project B .devcontainer/devcontainer.json
{
    "name": "Go",
    "service": "workspace", // <-- workspace is in this example, but could be any other value
...
  

Это workspace (в качестве примера) фактический сетевой псевдоним, видимый из:

 docker inspect project_B_devcontainer_workspace_1
  

или с помощью удаленного проводника VSCode в панели действий -> опция проверки контейнера…