buruh pelabuhan: format referensi tidak valid

104

Saya mengikuti tutorial ini: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

dan mereka menggunakan buruh pelabuhan. Ketika saya mencoba menjalankan buruh pelabuhan (di dalam skrip run.sh):

docker run -p 8888:8888 -v `pwd`/../src:/src -v `pwd`/../data:/data -w /src supervisely_anpr --rm -it bash

Saya mendapat kesalahan:

docker: invalid reference format.

Saya menghabiskan 2 jam dan saya tidak bisa benar-benar mengerti apa yang salah. Ide apa pun sangat dihargai.

ai2016
sumber
3
Coba inidocker run -p 8888:8888 -v "`pwd`/../src":/src -v "`pwd`/../data":/data -w /src --rm -it supervisely_anpr bash
Tarun Lalwani
5
Seperti @TarunLalwani dan @Oleg yang disebutkan, Anda harus memindahkan --rmdan -itdi antara rundan nama gambar. Itu tidak akan menjelaskan pesan kesalahannya. Apakah Anda sudah memeriksa apakah karakter nama gambar tidak memiliki pengkodean khusus atau huruf besar? Salin & Tempel dari cuplikan Anda berfungsi untuk saya, sementara docker run --rm foo! bashmencetak kesalahan yang sama seperti milik Anda.
gesellix
3
mempertimbangkan untuk memposting jawaban untuk ini sehingga lebih mudah untuk menemukan pria berikutnya
lloiacono
4
Selalu mengutip dua kali ekspansi dolar kecuali Anda benar-benar ingin membagi string menjadi kata-kata. Di sini, gunakan "$(pwd)"(bentuk modern "`pwd`"). Perintah Anda menjadi docker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bash.
Martin Jambon
1
@gesellix terima kasih. Perintah copy-paste dari manual tidak boleh dilakukan sejak awal saat mempelajari hal-hal baru, selain itu dapat membawa rasa sakit yang tidak terduga ketika beberapa simbol licik rusak terlibat. Untung saya melihat komentar Anda sebelum menghabiskan dua jam atau setengah hari untuk "kesalahan" seperti itu ^ _ ^
Den Drobiazko

Jawaban:

88

Di PowerShell, Anda harus menggunakan ${pwd}vs.$(pwd)

Levon Petrosyan
sumber
7
Inilah yang menyebabkan saya membenturkan kepala ke dinding (terkadang saya benci M $ FT)
beerwin
docker run --rm -ti --name zalenium -p 4444:4444 -p 5555:5555 \ -e SAUCE_USERNAME -e SAUCE_ACCESS_KEY \ -v /tmp/videos:/home/seluser/videos \ -v /var/run/docker.sock:/var/run/docker.sock \ dosel/zalenium start --sauceLabsEnabled trueada apa dengan perintahku? Itu juga memberikan kesalahan yang sama.
paul
Terima kasih banyak!
Andrew Brennan
45

Argumen pertama setelah "run" yang bukan merupakan flag atau parameter ke sebuah flag diurai sebagai nama gambar. Ketika penguraian itu gagal, itu memberi tahu Anda bahwa format referensi, alias nama gambar (tetapi bisa jadi id gambar, gambar yang disematkan, atau sintaks lainnya) tidak valid. Dalam perintah Anda:

 docker run -p 8888:8888 -v `pwd`/../src:/src -v `pwd`/../data:/data -w /src supervisely_anpr --rm -it bash

Nama gambar "supervisely_anpr" valid, jadi Anda perlu melihat sebelumnya di perintah. Dalam hal ini, kesalahan kemungkinan besar berasal dari pwdkeluaran jalur dengan spasi di dalamnya. Segala sesuatu setelah spasi tidak lagi menjadi parameter untuk -vdan pekerja galangan mencoba untuk menguraikannya sebagai nama gambar. Cara mengatasinya adalah dengan mengutip parameter volume ketika Anda tidak dapat menjamin bebas dari spasi atau karakter khusus lainnya.

Saat Anda melakukannya, Anda akan menemukan kesalahan berikutnya, "dapat dieksekusi tidak ditemukan". Segala sesuatu setelah nama gambar diuraikan sebagai perintah untuk dijalankan di dalam penampung. Dalam kasus Anda, itu akan mencoba menjalankan perintah --rm -it bashyang hampir pasti akan gagal sejak itu--rm tidak akan ada sebagai biner di dalam gambar Anda. Anda perlu menyusun ulang parameter untuk menyelesaikannya:

 docker run --rm -it -p 8888:8888 -v "`pwd`/../src:/src" -v "`pwd`/../data:/data" -w /src supervisely_anpr  bash

Saya mendapatkan beberapa detail lebih lanjut tentang dua kesalahan dan penyebab ini di slide saya di sini: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29

BMitch
sumber
3
Slide 30 memecahkan masalah saya. Saya memiliki file .sh yang berjalan di Cygwin. Saya berubah # !/bin/bash(perhatikan jarak antara #dan !ke #!/bin/bash dan kemudian End of Line Sequencedari CRLFke LF. Hanya itu yang saya lakukan. Terima kasih @BMitch untuk berbagi slide.
blongho
10

Saya memiliki masalah yang sama ketika saya copy-pastedperintah. Sebaliknya, ketika saya mengetik seluruh perintah, itu berhasil!

Semoga berhasil...

Aakash
sumber
2
Wow, ini benar-benar membantu.
Matjag
3
Yup, bagi saya itu --nameditempel -karena editor otomatis mengubahnya. Terima kasih Anda telah menghemat waktu saya.
Rvy Pandey
7

Saya punya masalah serupa. Masalah yang saya alami adalah $(pwd)memiliki ruang di sana yang membuang pelarian buruh pelabuhan.

Ubah nama direktori agar tidak memiliki spasi di sana, dan seharusnya berfungsi jika ini masalahnya

yashvier kosaraju
sumber
3

Saya mengalami masalah ini ketika saya tidak memiliki set variabel lingkungan.

docker push ${repo}${image_name}:${tag}

repodan image_nameditentukan tetapi tagtidak.

Ini menghasilkan docker push repo/image_name:.

Yang melempar docker: invalid reference format.

brandonbanks
sumber
Saya memiliki masalah yang sama dan saya memperbaikinya dengan menyetel tag ekspor variabel lingkungan yang hilang = latest
PHZ.fi-Pharazon
1

Menemukan bahwa menggunakan docker-compose configmelaporkan apa masalahnya.

Dalam kasus saya, file penulisan timpa dengan entri yang tidak menimpa apa pun .

pengguna12272112
sumber
0

Ini juga terjadi ketika Anda menggunakan pengembangan docker compose seperti di bawah ini, dalam produksi. Anda tidak ingin membuat gambar dalam produksi karena itu merusak ideologi wadah. Kami harus menyebarkan gambar:

  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"

Ubah itu untuk menggunakan gambar yang dibangun:

  web:
    command: /bin/bash run.sh
    image: registry.voxcloud.co.za:9000/dyndns_api_web:0.1
    ports:
      - "8000:8000"
stephen
sumber