Saya telah menemukan beberapa keanehan yang menarik ketika mencoba memasang gambar buruh pelabuhan di windows.
Saya membuat .sh
skrip yang melakukan mount folder proyek untuk menjalankan image lingkungan pengembang kami. Saya ingin satu skrip yang dapat dijalankan oleh setiap pengembang, apa pun mesinnya. Yang dilakukannya hanyalah menjalankan buruh pelabuhan dengan folder proyek saat ini.
#!/usr/bin/env bash
docker run -it --rm -v D:\my\project\folder:/wkDir $IMAGE_TAG yarn dev
Bekerja dengan baik. Sekarang rencananya adalah untuk memanggil skrip ini dari npm
, jadi saya ingin ini berfungsi relatif terhadap folder saat ini. Ayo coba versi lain.
docker run -it --rm -v $PWD:/wkDir $IMAGE_TAG yarn dev
Gagal dengan:
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from
daemon: Mount denied:
The source path "D:/my/project/folder;C"
doesn't exist and is not known to Docker.
Wat. Apa ;C
dan dari mana asalnya?
Jadi saya melakukan echo $PWD
yang memberi saya /d/my/project/folder
.
Menarik, jadi $PWD
memutuskan ke jalur yang benar dalam format jalur linux, dan sepertinya buruh pelabuhan mencoba menerjemahkan dari itu ke jalur jendela yang benar, kecuali ada ini ;C
yang muncul entah dari mana. Dan \
yang /
...
Apa sebenarnya yang terjadi disini?
Saya mendapatkan hasil yang sama di terminal git bash dan PowerShell VSCode.
Pembaruan: Saya perhatikan bahwa menjalankan .sh
terminal PowerShell di VSCode, membuka cmd.exe
jendela konsol terpisah yang tampaknya menjalankan skrip di git bash. Jadi ini mungkin masalah git bash.
"/${PWD}"
$ docker run -p 8080:3000 -v /$(pwd):/var/www -w //var/www node npm start
Saya akhirnya menemukan bahwa saya harus menggunakan garis miring di depan dengan tanda kurung, bukan tanda kurung. Juga, dengan direktori kerja saya membutuhkan dua garis miring di depan. FYI: ini adalah perintah yang saya butuhkan untuk Docker untuk Pengembang Web didocker run --rm -v /${PWD}/migrations:/flyway/sql --network xxx_default flyway
. Terima kasih.Bagi saya, solusinya cukup dengan memasukkan garis miring penutup
/
di ujung jalur mana pun .Misalnya, bukan
/opt/apache-atlas-2.0.0/bin/atlas_start.py
...menggunakan
/opt/apache-atlas-2.0.0/bin/atlas_start.py/
sumber
Memasang direktori saat ini ke kontainer Docker di Windows 10 dari Git Bash (MinGW) mungkin gagal karena konversi jalur POSIX. Jalur apa pun yang dimulai dengan
/
diubah menjadi jalur Windows yang valid.Keluar dari jalur POSIX dengan mengawali dengan
/
Untuk melewati konversi jalur, semua jalur POSIX harus diawali dengan garis miring (
/
) tambahan, termasuk/$(pwd)
.Di Git Bash, jalur
//data/test.txt
tidak diubah dan di shell Linux//
(garis miring ganda di depan) diabaikan dan diperlakukan sama seperti/
.Nonaktifkan konversi jalur
Nonaktifkan konversi jalur POSIX di Git Bash (MinGW) menggunakan
MSYS_NO_PATHCONV
variabel lingkungan.Konversi jalur dapat dinonaktifkan di tingkat perintah:
Konversi jalur dapat dinonaktifkan di tingkat shell (atau sistem):
sumber
Bisakah Anda mencoba di bawah perintah -
sumber
Saya sebenarnya memiliki masalah yang sama. Bergantung pada apakah Anda menggunakan Git Bash, perintah ini berfungsi (menggunakan nginx sebagai contoh):
docker container run --name container-name -v `pwd -W` / html: / usr / share / nginx / html -p 8000: 80 -d nginx
tentu saja Anda dapat menentukan port dan direktori sesuai keinginan.
sumber
Saya memiliki masalah yang sama pada git bash dan bukan command prompt. Anda bisa
sumber
Langsung bekerja untuk saya di bawah. jangan gunakan variabel dinamis.
sumber