WSL2-n futtatok dockert, docker-compose-t. Volt egy hiba (valami unicode...), aminek a kapcsán újra akartam telepíteni a docker-compose-t, de nem sikerült jól.
(Igazából elfelejtettem, hogy ezen a gépen a Docker Desktop ural le mindent, és amikor újra eszembe jutott, akkor már késő volt.)
Van itt egy fájl:
/mnt/c/Program Files/Docker/Docker/resources/bin/docker-compose
Ha ezt futtatom, az alábbit írja ki:
The command 'docker-compose' could not be found in this WSL 2 distro.
We recommend to activate the WSL integration in Docker Desktop settings.
See https://docs.docker.com/docker-for-windows/wsl/ for details.
Itt is van egy fájl:
/mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose
Ha ezt így, ezzel a hosszú elérési úttal megadva futtatom, akkor minden jó.
Volt egy fájl: .local/bin/docker-compose, ez mintha python lett volna, mint a többi ott lévő szkriptecske, ezt töröltem.
S ami a legmeglepőbb:
ha állítok egy linket (sudo-ként persze) a /usr/bin/-ből a működő /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose fájlra, akkor Segmentation fault-tal hal el a processz.
Hogy tudnám újra elérni, hogy a docker-compose újra a régi legyen? Esetleg milyen plusz állítást kell adnom annak a symlinknek, hogy működjön?
(A Docker Desktop "Enable integration..." irányát ne mondjátok, azt már próbáltam sokat. A sejtésem az, hogy a Windows-os rendszergazda kontra linuxos root jogosultságbeli különbség okozhat valami fennforgást.)
Szerk:
$ /usr/bin/docker-compose -v
docker-compose version 1.26.0-rc4, build d279b7a8
$ which docker-compose
/usr/bin/docker-compose
$ docker-compose -v
Segmentation fault
Szerk2: az strace segített, köszönet érte,@NevemTeve! Ebből derült ki, hogy tévesen kerül meghívásra egy ponton a /usr/local/bin/docker-compose.
Hozzászólások
a docker-compose az csak egy bináris, töröld le nyugodtan és szedd le újra a docker oldaláról. A Windows Docker-ben be lehet pipálni hogy WSL integáriciót használja (ha nem pipálod be akkor nem megy és a Hyper-V módban van), szóval így ránézésre nálad tényleg csak ennyit kéne hogy bepipálod. Mit próbálkoztál sokat ezen a részén?:)
Ki-be pipálgattam. Gyakorlatilag mindig be volt ez pipálva nálam, korábban is, most is.
(Resources, WSL integration, Enable integration with my default WSL distro, illetve General, Use the WSL2 based engine.)
Röviden annyi a kérdés, hogy hogy lehet elérni, hogy a docker-compose hatására a /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose induljon el, merthogy az jó úgy, ahogy van.
Látom már, hogy az a gond, hogy a "which docker-compose" nem ugyanazt mondja, mint amit a docker-compose hatására elindít.
Ugyanis a which docker-compose a /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose -ra mutató /usr/bin/docker-compose -t mondja, és explicite rámutatva szépen el is indul, ám ha csak úgy natúr beírom, hogy docker-compose, akkor jön a segmentation fault.
rm -rf /usr/bin/docker-compose && ln /mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose /usr/bin/docker-compose
ln: failed to create hard link '/usr/bin/docker-compose' => '/mnt/wsl/docker-desktop/cli-tools/usr/bin/docker-compose': Invalid cross-device link
kimaradhatott egy -s
Köszi. (Azt hittem, szándékosan hard linket javasolsz.)
A fent emlegetett "Enable integration with my default WSL distro" Docker-Desktop jelölőnégyzet ki/be pipálása is létrehozza ezt a linket. De ezzel együtt igaz az, hogy a /usr/bin/docker-compose jól fut, a "which docker-compose" ezt (/usr/bin/docker-compose) adja, a sima docker-compose pedig segfaultol.
Képernyőről másolva:
Hát a jó öreg
type docker-compose
mit mond?$ type docker-compose
docker-compose is hashed (/usr/bin/docker-compose)
És a
hash -r
változtat valamin?hash -r docker-compose -ra gondolsz, vagy csak egy natúr hash -r -re?
Lefuttattam mindkettőt, annyi változott, hogy immár:
$ type docker-compose
docker-compose is /usr/bin/docker-compose
Azonban továbbra is ez van:
$ docker-compose -v
Segmentation fault
$ /usr/bin/docker-compose -v
docker-compose version 1.26.0-rc4, build d279b7a8
Lehet, hogy a `strace docker-compose -v` elárul valamit?
Ezt adta (miután rájöttem, hogy a kimenetet 2>... -vel tudom elmenteni. :-) )
https://porgeto.hu/strace_docker-composer.txt
Köszönöm az ötletet!
Az error-ra rákeresve két helyen került elő találat.
Egyikük a /usr/local/bin/docker-compose-ra utalt. Ezt elmozgatva onnan már nem jön a hiba. Köszi nagyon az strace ötletet!!!!!!
Meg tudnátok írni, hogy nálatok mi van a ~/.local/bin/docker-composer-ben (ha létezik e fájl)?
Nem tudom, van-e köze a megoldáshoz annak, hogy amikor elindítom a /usr/bin/docker-compose-t, futás előtt kiírja:
WARNING: The Docker Engine you're using is running in swarm mode.
Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node.
To deploy your application across the swarm, use `docker stack deploy`.