Deskripsi
Saya menggunakan Docker versi 1.12.5 di Windows 10 melalui Hyper-V dan ingin menggunakan container executable sebagai perintah di jalur saat ini. Saya membuat image Docker yang berfungsi dengan baik, tetapi saya memiliki masalah untuk memasang jalur saat ini. Idenya adalah untuk membuat alias dan melakukan docker run --rm [...]
perintah sehingga dapat digunakan di seluruh sistem di direktori saat ini.
Mempersiapkan
Saya memiliki drive E dengan folder "test" dan di sana folder bernama "folder on windows host" untuk menunjukkan bahwa perintah tersebut berfungsi. Dockerfile membuat direktori /data
, mendefinisikannya sebagai VOLUME dan WORKDIR.
Memiliki E:\test
direktori saat ini di PowerShell dan menjalankan perintah Docker dengan jalur absolut, saya dapat melihat konten dari E:\test
:
PS E:\test> docker run --rm -it -v E:\test:/data mirkohaaser/docker-clitools ls -la
total 0
drwxr-xr-x 2 root root 0 Jan 4 11:45 .
drwxr-xr-x 2 root root 0 Jan 5 12:17 folder on windows host
Masalah
Saya ingin menggunakan direktori saat ini dan bukan notasi absolut. Saya tidak dapat menggunakan pwd dalam volume karena pesan kesalahan yang berbeda:
Mencoba dengan ($ pwd)
PS E:\test> docker run --rm -it -v ($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: ":/data" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Mencoba dengan / ($ pwd)
PS E:\test> docker run --rm -it -v /($pwd):/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error parsing reference: "E:\\test" is not a valid repository/tag.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Mencoba dengan \ ´pwd \ ´
PS E:\test> docker run --rm -it -v ´$pwd´:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: Invalid bind mount spec "´E:\\test´:/data": invalid mode: /data.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Mencoba dengan `pwd`
PS E:\test> docker run --rm -it -v `$pwd`:/data mirkohaaser/docker-clitools ls -la
C:\Program Files\Docker\Docker\Resources\bin\docker.exe: Error response from daemon: create $pwd: "$pwd" includes invalid characters for a local volume name, only "[a-zA-Z0-9][a-zA-Z0-9_.-]" are allowed.
See 'C:\Program Files\Docker\Docker\Resources\bin\docker.exe run --help'.
Apa sintaks yang benar untuk memasang direktori saat ini sebagai volume di Docker pada Windows 10?
${PWD}
bekerja pada sistem Unix juga (Linux, macOS). Catatan :pwd
= sekarang direktori kerja$(pwd)
yang juga akan bekerja di Linux (saya pikir - belum teruji)winpty docker run -it -v "/$(pwd -W):/usr/src/project" gcc:4.9
atauwinpty docker run -it -v "/$(cmd //c cd):/usr/src/project" gcc:4.9
.Ini berfungsi untuk saya di PowerShell:
sumber
PS C:\Users\X\Projects\docker_django> docker run --rm -v ${PWD}:/data alpine ls /data C:\Program Files\Docker Toolbox\docker.exe: Error response from daemon: invalid mode: /data. See 'C:\Program Files\Docker Toolbox\docker.exe run --help'.
Docker for Windows
sebagai gantiToolbox
.Untuk Git Bash untuk Windows (di ConEmu), berikut ini berfungsi untuk saya (untuk wadah Docker Windows):
Perhatikan backticks / backquote di sekitar
pwd -W
!Dengan semua variasi PWD lain yang saya coba, saya telah menerima:
"Error response from daemon: invalid volume specification: ..."
Pembaruan: Di atas adalah untuk wadah Docker Windows, untuk wadah Linux gunakan:
sumber
pwd -W
: / usr / share / data atomgraph / fuseki --file = / usr / share / data / Mokyklu_sarasas.ttl / mokyklos File tidak ditemukan: C: / tools / cmder / vendor /git-for-windows/usr/share/data/Mokyklu_sarasas.ttl`command`
Klik Terapkan . Anda mungkin diminta untuk memberikan kredensial pengguna.
Perintah di bawah ini sekarang harus berfungsi di PowerShell (command prompt tidak mendukung
${PWD}
):docker run --rm -v ${PWD}:/data alpine ls /data
PENTING : jika / ketika Anda mengubah kata sandi domain Windows Anda, pemasangan akan berhenti bekerja secara diam - diam , yang
-v
akan berfungsi tetapi penampung tidak akan melihat folder dan file host Anda. Solusi : kembali ke Pengaturan, hapus centang pada drive bersama, Terapkan , periksa lagi, Terapkan , dan masukkan kata sandi baru saat diminta.sumber
Ini milik saya yang kompatibel untuk Win10 docker-ce & Win7 docker-toolbox. Pada akhirnya pada saat saya menulis ini :).
Anda dapat memperhatikan bahwa saya lebih suka menggunakan / host_mnt / c daripada c: / karena saya terkadang mengalami masalah pada docker-ce Win 10 dengan c: /
sumber
${MOUNT_PATH}
/c/Program Files/Docker Toolbox
Solusi lain untuk Git Bash yang disediakan oleh orang lain tidak berhasil untuk saya. Ternyata saat ini ada bug / batasan di Git untuk Windows. Lihat ini dan ini .
Saya akhirnya berhasil membuatnya berfungsi setelah menemukan utas GitHub ini (yang memberikan beberapa solusi tambahan jika Anda tertarik, yang mungkin berhasil untuk Anda, tetapi tidak untuk saya).
Saya akhirnya menggunakan sintaks berikut:
Perhatikan
MSYS_NO_PATHCONV=1
di depandocker
perintah dan$(pwd)
- tanda kurung bulat, pwd huruf kecil, tidak ada tanda kutip, tidak ada garis miring terbalik.Selain itu, saya menggunakan container Linux di Windows jika itu penting ..
Saya menguji ini di Terminal Windows baru, ConEmu dan GitBash, dan semuanya bekerja untuk saya.
sumber
MSYS_NO_PATHCONV=1
opsi perintah? Jika tidak, direktori mount tujuan saya terisi dengan "c: / tools / cmder / vendor / git-for-windows"Perintah ini harus memperbaikinya.
docker run --rm -it -v
${PWD}:c:\data
mirkohaaser / docker-clitools{PWD} adalah folder host saat ini. setelah itu
:
adalah folder kontainer. Jika pemasangannya benar maka file akan terdaftar di direkturc:\data
di wadah.sumber
Anda perlu menukar semua garis miring ke belakang menjadi garis miring ke depan, jadi ubahlah
buruh pelabuhan -v C: \ my \ folder: / mountlocation ...
untuk
buruh pelabuhan -v C: / my / folder: / mountlocation ...
Saya biasanya memanggil buruh pelabuhan dari skrip cmd di mana saya ingin folder untuk dipasang relatif terhadap skrip yang saya panggil jadi di skrip itu saya melakukan ini ...
sumber
Prompt perintah (
Cmd.exe
)Saat Docker CLI digunakan dari Windows
Cmd.exe
, gunakan%cd%
untuk memasang direktori saat ini:Git Bash (MinGW)
Ketika CLI Docker digunakan dari Git Bash (MinGW), pemasangan direktori saat ini mungkin gagal karena konversi jalur POSIX: Volume yang dipasang pada Docker menambahkan; C ke ujung jalur jendela saat menerjemahkan dari jalur gaya linux .
Keluar dari jalur POSIX dengan mengawali dengan
/
Untuk melewati konversi jalur, jalur POSIX harus diawali dengan garis miring (
/
) agar memiliki garis miring ganda (//
), termasuk/$(pwd)
Nonaktifkan konversi jalur
Nonaktifkan konversi jalur POSIX di Git Bash (MinGW) dengan menyetel
MSYS_NO_PATHCONV=1
variabel lingkungan pada tingkat perintahatau level shell (sistem)
sumber
Git bash
echo ${PWD}
hasil:cmd atau PowerShell
echo ${PWD}
hasil:seperti yang kita lihat di cmd atau PowerShell $ {PWD} tidak akan berfungsi
sumber