Mengapa saya tidak dapat melakukan cd ke direktori dengan buruh pelabuhan?


39

Saya perlu menjalankan aplikasi dari direktori tertentu.

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

Direktori itu pasti ada, dan jika saya terhubung ke buruh pelabuhan dengan menjalankan bash secara interaktif saya dapat menjalankan perintah di atas.

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014

Saya dapat menjalankan program saya dengan menentukan path lengkap, tetapi kemudian crash karena diharapkan akan diluncurkan dari direktori saat ini. Apa yang dapat saya?

Jawaban:


34

Lewati perintah Anda sebagai argumen ke / bin / sh seperti ini:

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

docker run centos / bin / sh -c 'cd / bin; / bin / ls 'tidak mencetak apa-apa, sementara buruh pelabuhan menjalankan centos / bin / sh -c' / bin / ls / bin 'bekerja.
seanmcl

Sebenarnya kedua perintah menampilkan daftar file dalam direktori / bin. Sudah mencoba keduanya.
Glueon

Tidak di kotak saya, centos7.
seanmcl

1
Sebenarnya, bahkan hanya menghilangkan tanda kutip di sekitar perintah saya untuk menjalankan bekerja dengan baik. Saya pikir buruh pelabuhan membungkusnya dengan cara apa pun /bin/sh -c.
schmmd

85

Anda dapat menggunakan -wopsi untuk mengubah direktori kerja Anda.

docker run

  -w, --workdir=""           Working directory inside the container

Jadi, dalam kasus Anda, Anda akan menjalankan:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

Bisa saya gunakan -wdengan docker exec? Saya mencari cara untuk menjalankan skrip python di wadah saya, tetapi tidak bisa menghentikannya di luar wadah.
zx1986

oh, saya mendapat jawabannya ....flag provided but not defined: -w
zx1986

1
Sialan mengapa ini telah bersembunyi di bagian bawah halaman referensi buruh pelabuhan ! :-)
Amir Abiri

5
Ini seharusnya jawaban yang diterima
fferri

4

Gunakan WORKDIR di Dockerfile Anda untuk mengatur direktori kerja. Kemudian Anda dapat menjalankan perintah Anda dengan EXEC.


0

Ini mungkin saya disebabkan oleh masalah izin atau turunannya tidak dapat menemukan jalur yang dapat dieksekusi yang tersedia. Untuk memeriksa ini coba tambahkan lokasi yang dapat dieksekusi yang tersedia di jalur dan coba jalankan skrip

untuk menambahkan direktori saat ini di jalur silakan gunakan perintah di bawah ini

$ export PATH=$PATH:
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.