GNU/Linux >> Belajar Linux >  >> Linux

Jalankan dua perintah dengan docker exec

Dalam contoh pertama Anda, Anda memberikan -c tandai ke docker exec . Itu jawaban yang mudah:docker exec tidak memiliki -c bendera.

Dalam contoh kedua Anda, shell Anda mem-parsing ini menjadi dua perintah bahkan sebelum Docker melihatnya. Ini setara dengan ini:

if docker exec [id] cd /var/www/project
then
    composer install
fi

Pertama, docker exec dijalankan, dan jika keluar 0 (berhasil), composer install akan mencoba menjalankan secara lokal , di luar Docker.

Yang perlu Anda lakukan adalah meneruskan kedua perintah sebagai satu argumen ke docker exec menggunakan string. Maka mereka tidak akan ditafsirkan oleh shell sampai sudah berada di dalam container.

docker exec [id] "cd /var/www/project && composer install"

Namun, seperti yang Anda catat di komentar, ini juga tidak berfungsi. Itu karena cd adalah shell bawaan, dan tidak ada dengan sendirinya. Mencoba menjalankannya sebagai perintah awal akan gagal. Jadi langkah selanjutnya adalah menyerahkan ini ke shell untuk dieksekusi.

docker exec [id] "bash -c 'cd /var/www/project && composer install'"

Dan terakhir, pada titik ini && telah pindah ke kumpulan tanda kutip bagian dalam, jadi kita tidak benar-benar membutuhkan tanda kutip di sekitar bash perintah... Anda dapat menghapusnya jika mau.

docker exec [id] bash -c 'cd /var/www/project && composer install'

Semuanya setelah container id adalah perintah untuk dijalankan, jadi pada contoh pertama -c bukan opsi untuk dieksekusi, tetapi docker perintah mencoba menjalankan dan gagal karena perintah itu tidak ada.

Kemungkinan besar Anda menemukan sintaks ini dari docker run perintah di mana entrypoint diatur ke /bin/sh . Namun, exec melewati titik masuk, jadi Anda harus menyertakan perintah lengkap untuk menjalankannya. Seperti yang telah ditunjukkan orang lain, perintah itu menyertakan bash seperti shell atau dalam contoh di bawah, sh:

docker exec [id] /bin/sh -c 'cd /var/www/project && composer install'

Linux
  1. Jalankan Baris Perintah Dengan Satu Sudo?

  2. Jalankan Perintah Nohup Dengan Input?

  3. Perintah Docker menggantung tanpa respons

  1. Apa itu Git Bash; Bekerja dengan Perintah Git Bash

  2. Lembar Cheat Perintah Linux:Dengan Contoh

  3. Beberapa Perintah DOCKER

  1. Perintah Nmap dengan Contoh

  2. Perintah RPM di Linux dengan Contoh

  3. Perintah Docker Penting Teratas – Bekerja dengan Kontainer Docker