Меню

Docker compose volumes не работает

Проблема с volumes в docker-compose

Добрый день. Столкнулся с проблемой

В процессе запуска вроде как должна установить питоновская либа из volumes, но я получаю

python: can’t open file ‘/opt/lib/setup.py’: [Errno 2] No such file or directory

Так и должно быть. Сначала собираешь образ, потом запускаешь из него контейнер с натянутым volume.

Что-то я не очень понял. Как тогда будет выглядеть Dockerfile?

На всякий случай повторю, volume — свойство запущенного контейнера, а не образа.

Либо заранее клади результат работы скрипта в образ (upd: из такого пути на самом деле нельзя запустить, надо сделать COPY или ADD в контейнер сначала)

RUN python /home/andrey/lib/setup.py install

Либо при старте контейнера лезь в volume и запускай свой скрипт

CMD [«sh», «-c», «python /opt/lib/setup.py install; python3 /app/run.py»]

Зависит от того, чего ты хочешь добиться.

Либо при старте контейнера лезь в volume и запускай свой скрипт

Это как-то больше похоже на использование контейнеров как легковесных виртуалок

Тебе надо каталог с исходниками своей программы скопировать (ADD или COPY) в сборочный контейнер и оттуда установить программу, затем удалить исходники.

Недоступность томов во время сборки — это фича, иначе процесс сборки стал бы зависеть от своего предыдущего состояния. В ряде случаев это надо и ЕМНИП этого можно достичь, но это не твой случай.

Я использую volumes потому что не хочу пихать в контейнер либу на 2 Гб

Источник

Использование volume в docker-compose?

Буду рад если кто то простыми словами разъяснит некоторые непонятные моменты использования volume в docker-compose.

Зачем нужна последняя директива в данном docker-conpose, какую конкретно роль она выполняет:

— db-data в данном примере этот каталог расположенный в одной директории с docker-compose.yml?
— db-data:/var/lib/mysql/data

В чем отличие от такой записи(является ли она корректная?):
— ./db-data:/var/lib/mysql/data

version: «3.7»
services:
wordpress:
image: wordpress
ports:
— «8080:80»
networks:
— overlay
deploy:
mode: replicated
replicas: 2
endpoint_mode: vip

mysql:
image: mysql
volumes:
— db-data:/var/lib/mysql/data
networks:
— overlay
deploy:
mode: replicated
replicas: 2
endpoint_mode: dnsrr

  • Вопрос задан более года назад
  • 4582 просмотра

— db-data в данном примере этот каталог расположенный в одной директории с docker-compose.yml?

Нет. Это именованный volume. Его фактическая папка спрятана где-то глубоко, можно посмотреть командой docker volume inspect db-data и изначально он пустой.

В чем отличие от такой записи(является ли она корректная?):
— ./db-data:/var/lib/mysql/data

Такая запись первым параметром указывает не именованный volume, а подпапку в папке с docker-compose.yml Т.е. mysql получит папку со всем её содержимым по адресу, указанному вторым параметром.

Читайте также:  Не работают поворотники газ 3102

Лучше использовать полноценные volume, чем просто монтировать локальные папки.

Источник

Как заставить volumes Docker compose не затирать данные из контейнера?

Пробрасываю том в docker-compose

Ожидаю что файлы из директории var/www/html попадут на хост в ./www
Но туда не то чтобы ничего не попадает, а еще и затирает все в контейнере по этому адресу.
Тут уже отвечали что это нормальное его поведение. Но вот есть одно но.
Если я буду использовать официальный образ wordpress с докерхаба, то так же смонтировав корень вердпресса на хост данные и отобразятся у меня на хосте и не будут потерты в контейнере. Значит как то можно это сделать. Интересно как

  • Вопрос задан более года назад
  • 552 просмотра

Покажите полностью, как с образом WP у вас получается из контейнера заполнить папку на хосте.

Уточните платформу: на Linux опыты проводите, или Windows, Mac OS?

Сергей Соколов,
Платформа во всех случаях мак

Владимир Куц, Описанное вами поведение мне понятно.
Вопрос в том, что изначально контейнер в папке var/www/html уже имеются некоторые файлы, которые должны быть прокинуты на хост. Но они затираются. Что собственно, как я понял, стандартное поведение для volumes

Если контейнер с wp как то обходит это поведение, то видимо и я могу, чего собственно и хочу добиться.
Выше есть docker-compose конфиг под вп, собственно идентичный представленному на официальной странице вп на докерхабе

Ожидаю что файлы из директории var/www/html попадут на хост в ./www

Нет. Наоборот. Монтируется что-то (папка или docker volume) внутрь контейнера, заменяя собой ранее существовавшую (если) в контейнере папку. Или индивидуальный файл.После этого, если внутри контейнера в этой папке создаётся файл, он оказывается в папке_хоста или томе.

WordPress при запуске смотрит, есть ли его файлы в папке. И если папка пуста — инсталлируется, распаковывает все свои файлы в неё.

При этом, разумеется, раз смонтирована папка хоста — все файлы появляются в ней.

Т.е. нет изначально никаких файлов в контейнере в /var/www/html — будь она папкой контейнера или смонтированной в него папкой хоста или томом докера. При запуске, если там пусто, файлы создаются / записываются контейнером.

Источник

docker-compose on Windows volume not working

I’ve been playing with Docker for the past week and think the container idea is very useful, but despite reading everything I can for the past 3 days I can’t get the volume mapping to work

to C:\ProgramData\Docker\volumes — basically any suggestion that showed in my search results. The dbImage is a SQL Server image that I need to persist the data from but am wondering what the magic is as nothing I’ve tried works. Any help is GREATLY appreciated.

Читайте также:  Как настроить часы skmei 1228

I’m running on Windows 10 Pro build 1803.

Why does this have to be so hard? Than you to whomever knows how to make this actually work.

8 Answers 8

The solution is to reference the true path on Windows using the volumes: option as below:

To persist the data I used the following:

Hope this helps someone else as many of the examples I found searching both on SO and elsewhere did not work for me, and in the Docker forums there are a lot of posts saying mounting volumes not work for Windows.

I was struggling with a similar problem when trying to mount a volume to a specific path of my Windows machine: basically it didn’t work so every time I restarted my Docker instance I lose all my DB data. I finally found out that it is because Docker for Windows by default cannot interpret Windows path so the flag COMPOSE_CONVERT_WINDOWS_PATHS has to be activated. To do so:

  • Run the command «set COMPOSE_CONVERT_WINDOWS_PATHS=1»
  • Restart Docker
  • Go to Settings > Shared Drives > Reset credentials and then select drive and then apply
  • From the command line, kill the containers (docker container rm -f )
  • Re-run the containers

If your windows account credentials has been changed, you also have to reset credentials for shared drives. (Settings > Shared Drives > Reset credentials)

In my case, the password was changed by my company security policy.

Источник

Docker compose mounting empty volume on Windows #796

Comments

marcospgp commented Oct 7, 2018 •

I’m using docker toolbox on my laptop because it doesn’t support docker for windows.

Our docker configuration works fine on my desktop, but when using docker toolbox I run into an issue where the volume mounted with the project files is empty.

Kitematic shows «local folder: no folder» under volume settings for both usr/src/app and usr/src/app/node_modules . While this is expected for the node_modules folder, app should be linked to the project folder on the host.

Here is the docker-compose file:

and here is the Dockerfile:

When I run docker-compose up , nodemon doesn’t work because it can’t find any files. It reports:

Thank you so much!

The text was updated successfully, but these errors were encountered:

marcospgp commented Oct 7, 2018

I think this is related to this issue, which was closed without any action 🙁 docker/compose#2548

Читайте также:  Веб машина не работает

joealam commented Dec 18, 2018

I recently started using Docker toolbox on my laptop and ran into this issue.

I found that if I use Docker Quickstart Terminal I have this problem, but if I use CMD it seems to work. Hopefully that will be a usable workaround for others having the problem too.

kaitoAckerman commented Jan 22, 2019

docker-compose up mount perfectly when using CMD but not in Docker Terminal .. what the heck.

dizzersee commented Jun 24, 2019 •

Mount does not work in CMD for me.
Update: I switched to Docker for Windows and now it works (docker-compose)

lucasmonstro commented Aug 5, 2019

For me CMD is not working, Powershell is not working, ofc Git Bash is not working.

Idk why but I cant mount volumes.

kuiamenhmartin commented Aug 11, 2019

Same here @luqezman . I was also trying to mount volume using docker toolbox in windows 10, i even tried WSL but still no luck.

ankhuve commented Aug 12, 2019

@kuiamenhmartin I had this issue just now with Docker Toolbox. Solved it by updating VirtualBox, turns out it was outdated on my system. Just run docker-machine rm default , update VirtualBox and restart using the quickstart again.

Hopefully this might solve the issue for some of you!

top-master commented Feb 5, 2020 •

Overview

Forwarding the ./ relative path in volumes section will automatically get resolved by docker-compose to the directory containing docker-compose.yml file (for example, if your project is in %UserProfile%/my-project then .:/usr/src/app gets /c/Users/my-name/my-project:/usr/src/app ).

The problem is that currently (using DockerToolbox-19.03.1 ) only the /c/Users directory gets shared with the Virtual-Machine (toolbox puts docker itself in the VM which means it has no access to your file system, except of mounted shared-directories).

Conclusion

So, basically placing your project there ( C:\Users\YOUR_USER_NAME ) should make ./ work.
But not even that worked for me, and we ended up with below _prepare.sh script:

Usage:

  • Place a copy of it beside each project’s docker-compose.yml file.
  • Run it each time the system is turned on (simply double click it or its shortcut).
  • Done! relative paths should now work even if your project is in another drive (far away and outside of C:\Users dir).

Note: with a little edit it should work without docker-compose being required.

Источник

Adblock
detector