Saya mencoba menjalankan perintah GANDA seperti ini.
docker run image cd /path/to/somewhere && python a.py
Tapi ini memberi saya kesalahan "Tidak ada file atau direktori" karena ditafsirkan sebagai ...
"docker run image cd /path/to/somewhere" && "python a.py"
Tampaknya beberapa karakter ESCAPE seperti "" atau () diperlukan.
Jadi saya juga mencoba
docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)
tetapi ini tidak berhasil.
Saya telah mencari Referensi Docker Run tetapi belum menemukan petunjuk tentang karakter ESCAPE.
docker
docker-image
ai0307
sumber
sumber
docker run alpine sh -c "ls | wc >> xxx"
ini banyak membantu saya, ketika bash tidak tersedia.cd
tetapi tidak untuk hal-hal di mana masalah kode pengembalian;
tidak sama dengan&&
lihat unix.stackexchange.com/questions/37069/…Anda dapat melakukan ini beberapa cara:
Gunakan opsi -w untuk mengubah direktori kerja:
https://docs.docker.com/engine/reference/commandline/run/#set-working-directory--w
Sampaikan seluruh argumen ke / bin / bash:
sumber
--workdir
dalam tautan yang disediakan. Halaman mungkin telah dipindahkan / diubah. Dapat diperbarui ke docs.docker.com/engine/reference/run/#workdir atau docs.docker.com/engine/reference/commandline/runAnda juga dapat menyalurkan perintah di dalam wadah Docker,
bash -c "<command1> | <command2>"
misalnya:Tetapi, tanpa menggunakan shell di remote, output akan dialihkan ke terminal lokal.
sumber
Jika Anda ingin menyimpan hasilnya dalam satu file di luar wadah, di mesin lokal Anda, Anda dapat melakukan sesuatu seperti ini.
Hasil dari perintah Anda akan tersedia di
/tmp/result.txt
dalam mesin lokal Anda.sumber
Bagi siapa pun yang datang ke sini mencari untuk melakukan hal yang sama dengan
docker-compose
Anda hanya perlu menambahkanbash -c
dan menyertakan beberapa perintah dalam tanda kutip, bergabung bersama&&
.Jadi dalam contoh OPs
docker-compose run image bash -c "cd /path/to/somewhere && python a.py"
sumber
docker-compose down [service-name]
tidak bekerja atau? (dan tidak perlu khawatir, selamat datang :))Hanya untuk membuat jawaban yang tepat dari komentar @ Eddy Hernandez dan yang sangat benar karena Alpine datang dengan abu bukan bash.
Pertanyaannya sekarang referes untuk Memulai shell dalam wadah Docker Alpine yang menyiratkan menggunakan
sh
atauash
atau/bin/sh
atau/bin/ash/
.Berdasarkan pertanyaan OP:
docker run image sh -c "cd /path/to/somewhere && python a.py"
sumber
bash -c
berfungsi dengan baik jika perintah yang Anda jalankan relatif sederhana. Namun, jika Anda mencoba menjalankan serangkaian panjang perintah yang penuh dengan karakter kontrol, itu bisa menjadi rumit.Saya berhasil menyelesaikan ini dengan menyalurkan perintah saya ke dalam proses dari luar, yaitu
cat script.sh | docker run -i <image> /bin/bash
sumber