#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 в панели действий -> опция проверки контейнера…