Документация docker-compose, по-видимому, подразумевает, что единственное время, когда вам нужно определить COMPOSE_PROJECT_NAME
, это когда вы хотите контролировать префикс для ресурсов в файле docker-compose.
https://docs.docker.com/compose/reference/envvars/#compose_project_name
Однако я обнаружил, что существует другая функция этой переменной.
В своих экспериментах я обнаружил, что для использования docker-compose ps
и просмотра ваших контейнеров, которые вы запускали с docker-compose up
, вы должны убедиться, что тот же COMPOSE_PROJECT_NAME
определен в среде, когда вы запускаете ps
, а затем, когда ты бежал up
Перед экспортом:
user@host:$ docker-compose ps
-- Empty Result --
После экспорта:
user@host:$ export COMPOSE_PROJECT_NAME=example-devops-docker
user@host:$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------
example_devops_docker /bin/sh -c entrypoint.sh Up 0.0.0.0:12312->80/tcp
Кроме того, я обнаружил, что если вы запускаете docker-compose down
после запуска docker-compose up
в другом проекте, в случаях, когда оба проекта имеют одинаковое имя папки, проекты конфликтуют друг с другом.
Я не нашел никакой конфигурации для docker-compose в моем домашнем каталоге, и дамп среды не выявил каких-либо переменных docker-compose, которые могли бы подсказать, как docker-compose запутался между моими 2 проектами
В настоящее время я склонен думать, что docker-compose управляет ресурсами docker через метки на этих ресурсах. Поскольку docker inspect $container name
раскрывает следующее
"Labels": {
"com.docker.compose.config-hash": "7f20a609dc9f9cf3ea580f802586fe0996e9d05ac720949b142a4841e30f0dba",
"com.docker.compose.container-number": "1",
"com.docker.compose.oneoff": "False",
"com.docker.compose.project": "exampledevopsdocker",
"com.docker.compose.service": "app",
"com.docker.compose.version": "1.11.2"
}
Мой вопрос: кто-нибудь знает, как docker-compose хранит информацию о последней среде docker-compose up
и как эта информация передается через терминалы.
Моя текущая теория заключается в том, что метка com.docker.compose.project
устанавливается независимо от того, вручную ли вы называете свои контейнеры, и эта метка основана на имени вашего каталога, если вы не указали COMPOSE_PROJECT_NAME
явно.
Поэтому каждый раз, когда я выполняю docker-compose изнутри папки, он генерирует идентификатор на основе имени папки и сбрасывает ресурсы докера с этим идентификатором внутри его меток.