W Docker Compose v1.6.0 + dostępna jest teraz nowa składnia pliku / wersja 2 dla tego docker-compose.yml
pliku. Zmiany obejmują oddzielny klucz najwyższego poziomu o nazwie volumes
. Umożliwia to „scentralizowanie” definicji woluminów w jednym miejscu.
To, co próbuję zrobić, to nazwać tam woluminy i mieć jedną ścieżkę odniesienia wielu woluminów na moim lokalnym dysku hosta. Poniżej znajduje się przykład zgłaszania wyjątku z Traceback
zakończeniem
AttributeError: 'list' object has no attribute 'items'
Przykład docker-compose.yml
:
version: '2'
services:
db:
image: postgres
volumes:
- database:/var/lib/postgres/data
php:
image: php-fpm:5.6
volumes:
- phpconf:/etc/php/conf.d
namedvolume:
container_name: namedvolume
build: ./Docker/Testvolume
volumes:
- ./Docker/Testvolume/shareme
volumes:
database:
- ./Docker/Postgres/db:ro
- ./Docker/Postgres/ini
phpconf:
- ./Docker/PHP-FPM/conf
singledir: ./Docker/foo
completemap: ./Docker/bar:/etc/service/conf.d
- namedvolume:/etc/service/conf.d # < this was a separate attempt w/o the other keys
… ?
Do tej pory przeczytałem wszystkie odniesienia do konfiguracji Docker Compose docs master
-branch Volume, odniesienie do Docker Compose docs Volume / Volume-Driver i przejrzałem przykłady GitHub, aby znaleźć poprawną składnię, która jest oczekiwana. Wygląda na to, że nikt już tego nie używa (GitHub), a dokumentacja jest daleka od ukończenia (docker.com). Próbowałem również zbudować osobny wolumin jako service
i odwołać się do niego volumes
, ale to również nie działa. Masz pomysł, jak powinna wyglądać ta składnia?
źródło
$(docker volume ls |awk '{print $2}')
możesz użyć$(docker volume ls -q)
Nie tylko jest to prostsze, ale nie drukuje „GŁOŚNOŚCI” w pierwszym wierszu.volumes_from
jest dziedziczenie listy woluminów z innego kontenera. Aby użyć nazwanego woluminu, użyj składni na poziomie usługi- NAME:DEST
i ustaw ścieżkę wvolumes
kluczu najwyższego poziomu . To, co robi ten przykład (w chwili pisania tego tekstu), tworzy standardowy wolumin oprócz nazwanego woluminu, a nazwany wolumin po prostu nie jest używany.W moim rozumieniu możesz użyć
volumes:
sekcji globalnej doWoluminy w sekcji globalnej będą tworzone automatycznie, chyba że zostanie to określone
external: true
. Nadal będziesz musiał powiedzieć każdej usłudze w tejvolumes:
sekcji, gdzie ma zainstalować ten wolumin.Oto bardzo prosty przykład:
volumes:
Wpis globalny dlaproject
spowoduje utworzenie nazwanego woluminuproject
. Następnie jest montowany jako/bar
serwisowy i/foo
serwisowy. Obie usługi współużytkują dane woluminu i mogą je odczytywać / zapisywać.Nie sądzę, że to, co próbujesz zrobić, jest możliwe (przekształcenie wielu ścieżek w jeden wolumin i użycie różnych flag r / w). Jeśli jest to możliwe, prawdopodobnie znajdując sposób na utworzenie nazwanego woluminu z tymi właściwościami w inny sposób, a następnie dodanie go jako woluminu zewnętrznego:
źródło
project
a następnie odwołujesz się do niegoproject:/bar
, gdzieproject
faktycznie zdefiniowano ścieżki?project:
aliasu? Skąd doker wie, czy chcę się dzielić, powiedz./some_folder/some_subfolder/yet_another_subfolder
do kontenerówone:
itwo:
?Sprawdź na przykład wersję 2 , a także odniesienie do konfiguracji woluminu :
Mój przykład: (wersja 1)
źródło
Version 2
sekcję dokumentu)volumes
klucza najwyższego poziomu - czego nie zrobiłem, stąd pytanie. Nie rozumiem, codocker-compose.yml
ma wyjaśniać część składni wersji 1.Myślę, że to, co próbujesz zrobić, jest mniej więcej takie samo, jak tutaj . Krótko mówiąc: obecnie nie jest możliwe utworzenie nazwanego woluminu, który odnosi się do punktu podłączenia na hoście. Możesz utworzyć nazwany wolumin, aby współużytkować dane między kontenerami, ale dane będą istnieć tylko w samym woluminie i znikną po usunięciu woluminu.
Zaproponowano montowanie nazwanych woluminów , ale niestety nie zostanie ono dodane do rdzenia w najbliższej przyszłości. Jest to jednak możliwe przy użyciu wtyczki dokującej o nazwie local-persist .
źródło