Я все еще изучаю некоторые особенности docker-compose и docker-контейнеров в целом. Мне неясна разница между сопоставлением папки хоста с папкой контейнера с использованием привязки и аналогичным сопоставлением в качестве тома. Непонятно, как это относится к объявлению тома. Например, у меня есть довольно много контейнеров, определенных в моем файле docker-compose.yml, но я начал играть с этими двумя, чтобы решить свою проблему:
# MPPS testing server, DICOM
python_mpps:
build: python_mpps
image: sdscotti/python_mpps
depends_on: [mysql_db,pacs-1,pacs-2]
ports: ["104:11112"]
volumes:
- type: bind
source: ./python_mpps/scripts_log
target: /scripts
- type: bind
source: ./tls
target: /etc/python/tls
- type: volume
source: MWL
target: /MWL
volume:
nocopy: true
tty: true
# MWL server, REST API
python_mwl_api:
build: python_mwl_api
image: sdscotti/python_mwl_api
depends_on: [mysql_db,pacs-1,pacs-2]
ports: ["5000:5000"]
environment:
PORT: 5000
FLASK_DEBUG: 1
FLASK_ENV: development
volumes:
- type: bind
source: ./python_mpps/scripts_log
target: /scripts
- type: bind
source: ./tls
target: /etc/python/tls
- type: volume
source: MWL
target: /MWL
volume:
nocopy: true
tty: true
volumes:
MWL:
Я использую Docker Desktop на Mac (Catalina) и только CLI на LINUX, но это относится к OS X. Если я зайду в оболочку bash в обоих контейнерах и проверю, что находится в /etc/python/tls, я увижу, что есть также на моем хосте в ./tls, что я и ожидаю увидеть (например)
docker exec -it 37fabd30c9afe6ca290a3e7f279a7a677061b0fbbc6277650d7055a285fb1ca4 /bin/sh
# cd /etc/python/tls
# ls
USAGE.md copy-tls-to-docker-volumes.sh nginx-crt.pem nginx.cnf
ca.cnf generate-tls.sh nginx-key.pem
То же самое относится к /scripts в каждом контейнере. Сопоставляется с хостом, как и ожидалось, и именно там есть скрипты Python, которые запускаются при запуске, а также файл журнала.
# cd /scripts
# ls
mpps.log mpps.py
#
Я должен сказать, что эти папки сценариев используются только этим конкретным контейнером и не используются совместно с другими, тогда как ./tls на хосте читается многими контейнерами, но не записывается вообще. То есть просто скопировать файлы ssl .crt и .key на серверы, поскольку это сертификат с подстановочными знаками.
Если я затем посмотрю на папку /MWL в контейнере, я увижу то, что ожидаю увидеть:
# cd /MWL
# ls
test.wl
#
но я понятия не имею, где это находится в моей хост-системе в OS X. Я могу сделать:
docker volume inspect orthanc_docker_ris_MWL
[
{
"CreatedAt": "2021-07-06T21:08:20Z",
"Driver": "local",
"Labels": {
"com.docker.compose.project": "orthanc_docker_ris",
"com.docker.compose.version": "1.29.2",
"com.docker.compose.volume": "MWL"
},
"Mountpoint": "/var/lib/docker/volumes/orthanc_docker_ris_MWL/_data",
"Name": "orthanc_docker_ris_MWL",
"Options": null,
"Scope": "local"
}
]
что на самом деле может быть где-то здесь:
/Users/xxxx/Library/Containers/com.docker.docker/Data/vms
Что я хочу сделать, так это сопоставить том с легкодоступным местом на моем хосте, например, в корне файла docker-compose.yml. Использование привязки на самом деле работает нормально, но у меня возникают проблемы с записью в папку, которая связана более чем с одним контейнером. Не уверен, является ли это ограничением, связанным с самим докером, или один из моих контейнеров фактически блокирует папку. На самом деле цель состоит в том, чтобы иметь общую привязку или монтирование, которые могут читать и записывать из нескольких контейнеров, а не том, который может иметь ту же функциональность, но я бы хотел, чтобы том был сопоставлен с папкой, как описано.
У меня также есть 2 экземпляра Orthanc PACS, и я попытался заставить их использовать этот том, и похоже, что это так, потому что Docker Desktop показывает в общей сложности 4 связанных контейнера, 2 выше или 2 других.
orthanc_docker_ris_MWL
In use by 4 containers
CREATED
38 minutes ago
На самом деле это то, что я хочу, но мне нужно посмотреть, смогу ли я писать на том из нескольких контейнеров, а затем в идеале иметь его в корне моего файла для создания докеров, а не в каком-то неясном месте в моей системе в какой-то неизвестный мне формат.
Можно также упомянуть, что есть несколько других проблем с настройкой в OS X, поскольку некоторые контейнеры (например, nginx с php с использованием супервизора) требуют много времени для запуска (возможно, пару минут, хотя после этого работает нормально), и есть также эта проблема:
проблема с разрешением global.stat упоминается в другом месте. Это также происходит в LINUX, и похоже, что есть много людей с этой проблемой.
Я считаю, что Docker Desktop для OS X не так уж плох, но гораздо лучше использовать хост LINUX. Мой контейнер NGINX — PHP в LINUX запускается сразу, поэтому он должен иметь какое-то отношение к диспетчеру файловой системы хоста.
ПРИМЕЧАНИЕ:
Если я перейду с тома на привязку и удалю том, он будет настроен почти так, как я этого хочу, но мне придется проверить, могут ли в него записывать более одного контейнера. Я подозреваю, что, возможно, PACS каким-то образом блокирует папку.
- type: bind
source: ./MWL
target: /MWL