У меня есть docker-compose
, используемый для производства, который я надеюсь объединить с докернизированной средой разработки VS Code.
./docker-compose.yml
version: "3.6"
services:
django: &django-base
build:
context: .
dockerfile: backend/Dockerfile_local
restart: on-failure
volumes:
- .:/website
depends_on:
- memcached
- postgres
- redis
networks:
- main
ports:
- 8000:8000 # HTTP port
- 3000:3000 # ptvsd debugging port
expose:
- "3000"
env_file:
- variables/django_local.env
...
Обратите внимание, что я оба перенаправить и выставить порт 3000
здесь. Это результат того, что я играю, чтобы получить то, что мне нужно. Не уверен, что мне нужно одно или другое, или оба.
Мой ./devcontainer
выглядит следующим образом:
./devcontainer/devcontainer.json
{
"name": "Dev Container",
"dockerComposeFile": ["../docker-compose.yml", "docker-compose.extend.yml"],
"service": "dev",
"workspaceFolder": "/workspace",
"shutdownAction": "stopCompose",
"settings": {
"terminal.integrated.shell.linux": null,
"python.linting.pylintEnabled": true,
"python.pythonPath": "/usr/local/bin/python3.8"
},
"extensions": [
"ms-python.python"
]
}
.devcontainer/docker-compose.extended.yml
version: '3.6'
services:
dev:
build:
context: .
dockerfile: ./Dockerfile
external_links:
- django
volumes:
- .:/workspace:cached
command: /bin/sh -c "while sleep 1000; do :; done"
Идея состоит в том, что я хочу иметь возможность запускать код VS, подключенный к службе dev
, и оттуда я хочу запустить отладчик, подключенный к службе django
, используя следующую команду launch.json
config:
{
"name": "WP",
"type": "python",
"request": "attach",
"port": 3000,
"host": "localhost",
"pathMappings": [
{
"localRoot": "${workspaceFolder}",
"remoteRoot": "/website"
}
]
},
При этом я получаю сообщение об ошибке, где VS Code говорит connect ECONNREFUSED 127.0.0.1:3000
. Как я могу получить сопоставленные порты, чтобы это работало? Это вообще возможно?
Редактировать
Почему бы просто не подключиться напрямую к сервису django
?
Контейнер dev просто содержит python и время выполнения узла для linting и в целях интеллигенции при использовании VS Code. Идея создания нового сервиса, специально предназначенного для отладки в среде разработчиков, заключается в том, что ./docker-compose.yml
содержит более нескольких сервисов, которые некоторые разработчики в моей команде иногда отключают, чтобы снизить потребление ресурсов. Создав контейнер специально для dev, он также упрощает настройку .devcontainer-devcontainer.json
для добавления таких вещей, как расширения, в один контейнер без необходимости добавлять их после присоединения к работающему контейнеру «non-dev». Если бы это работало, VS Code работал бы внутри контейнера dev
(см. this ).