J'ai joué avec Docker la semaine dernière et je pense que l'idée de conteneur est très utile, mais malgré la lecture de tout ce que je peux au cours des 3 derniers jours, je ne peux pas faire fonctionner le mappage de volume
get docker-compose to use my existing volume.
Docker Version: 18.03.1-ce
docker-compose version 1.21.1, build 7641a569
I created a volume using the following via a Dockerfile
# Reference SQL image
FROM Microsoft/mssql-server-windows-developer
# Create directory within SQL container for database files mapped to the volume
VOLUME sqldata:c:/MSSQL
and here it shows:
C:\ProgramData\Docker\volumes>docker volume ls
local sqldata
Now I've tried probably 60+ different "solutions" based on StackOverflow and Docker forums, but none of them work. (Note despite the names below with Azure I am simply trying to get this to run locally, Azure is next hurdle)
Docker-compose.yaml:
version: '3.4'
services:
ws:
image: wsManager
container_name: Azure-wcf
ports:
- "80"
depends_on:
- db
db:
image: dbimage:latest
container_name: Azure-db
volumes:
- \sqldata:/mssql
# - type: volume
# source: sqldata
# target: /mssql
ports:
- "1433"
I've added a volumes section but it does not help,
volumes:
sqldata:
external:
name: sqldata
changed the - \sqldata:/mssql
to every possible slash .. . ~ whatever. Moved the file to yaml file
à C:\ProgramData\Docker\volumes - essentiellement toute suggestion qui apparaît dans mes résultats de recherche. Le dbImage est une image SQL Server dont j'ai besoin pour conserver les données mais je me demande quelle est la magie car rien de ce que j'ai essayé ne fonctionne. Toute aide est grandement appréciée.
J'utilise Windows 10 Pro build 1803.
Pourquoi cela doit-il être si difficile? Que vous à quiconque sait comment faire en sorte que cela fonctionne réellement.
La solution consiste à référencer le vrai chemin sous Windows en utilisant l'option volumes: comme ci-dessous:
sqldb:
image: sqlimage
container_name: Azure-db
volumes:
- "C:\\ProgramData\\Docker\\volumes\\sqldata:c:\\mssql"
Pour conserver les données, j'ai utilisé ce qui suit:
environment:
- "sa_password=ddsql2017@@"
- "ACCEPT_EULA=Y"
- 'attach_dbs= {"dbName":"MyDb","dbFiles":"C:\\MSSQL\\MyDb.mdf","C:\\MSSQL\\MyDb.ldf"]}]'
J'espère que cela aide quelqu'un d'autre, car la plupart des exemples que j'ai trouvés en recherchant à la fois sur SO et ailleurs n'ont pas fonctionné pour moi, et dans les forums Docker, il y a beaucoup de messages disant que les volumes de montage ne fonctionnent pas pour Les fenêtres.
Je rencontrais des problèmes similaires lorsque j'essayais de monter un volume sur un chemin spécifique de ma machine Windows: fondamentalement, cela ne fonctionnait pas, donc à chaque redémarrage de mon instance Docker, je perdais toutes mes données de base de données. J'ai finalement découvert que c'est parce que Docker pour Windows par défaut ne peut pas interpréter le chemin Windows, donc l'indicateur COMPOSE_CONVERT_WINDOWS_PATHS doit être activé. Faire cela:
J'espère que cela aide
Si les informations d'identification de votre compte Windows ont été modifiées, vous devez également réinitialiser les informations d'identification des lecteurs partagés. (Paramètres> Lecteurs partagés> Réinitialiser les informations d'identification)
Dans mon cas, le mot de passe a été modifié par la politique de sécurité de mon entreprise.
Pour ceux qui utilisent Ubunto WSL:
Sudo mkdir /c
Sudo mount --bind /mnt/c /c
docker-compose up
Docker sous Windows a un comportement étrange car Windows a des limites avec les informations d'identification et également avec la machine virtuelle que Docker utilise (Hyper-V, VirtualBox - en fonction de votre version et configuration de Docker).
Fondamentalement, vous avez raison de mapper un dossier dans
volumes:
section à votre service:
Le chemin est
version: '3.4'
services:
db:
image: dbimage:latest
container_name: Azure-db
volumes:
- c:/Temp/sqldata:/mssql
L'important est que vous n'avez pas besoin de créer explicitement le volume dans la section des volumes, mais le docker-compose up le créera (la même chose est pour le docker run).
Chose étrange, il ne se présentera jamais
docker volume ls
mais il sera utilisable avec les mêmes fichiers dans le répertoire windows et dans le chemin du conteneur/mssql
Vous pouvez le tester avec:
docker run --rm -v c:/Temp/sqldata:/data Alpine ls /data
ou
docker run --rm -v c:/Temp:/data Alpine ls /data
S'il disparaît, il a probablement perdu les informations d'identification et le réinitialiser via Docker-> Paramètres-> Lecteurs partagés-> Réinitialiser les informations d'identification.
J'espère que cela a été clair et a couvert tous les aspects pour vous.
Par défaut, il semble qu'après l'installation de Docker sur Windows, le partage des pilotes est désactivé - vous ne pourrez donc pas utiliser les volumes (qui sont stockés sur des disques)
Activation d'un tel partage, via: Docker in tray - right click - Settings
, m'a aidé, les volumes ont commencé à bien fonctionner.