นักเทียบท่า: รูปแบบการอ้างอิงไม่ถูกต้อง


114

ฉันกำลังติดตามบทช่วยสอนนี้: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

และพวกเขาใช้นักเทียบท่า เมื่อฉันพยายามเรียกใช้นักเทียบท่า (ภายในสคริปต์ run.sh):

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

ฉันได้รับข้อผิดพลาด:

docker: invalid reference format.

ฉันใช้เวลา 2 ชั่วโมงและฉันไม่เข้าใจจริงๆว่ามีอะไรผิดพลาด ความคิดใด ๆ ที่ชื่นชมจริงๆ


3
ลองดูdocker run -p 8888:8888 -v "`pwd`/../src":/src -v "`pwd`/../data":/data -w /src --rm -it supervisely_anpr bash
Tarun Lalwani

5
เช่นเดียวกับ @TarunLalwani และ @Oleg ที่กล่าวถึงคุณจะต้องย้าย--rmและ-itอยู่ระหว่างrunชื่อภาพ นั่นจะไม่อธิบายข้อความแสดงข้อผิดพลาด คุณตรวจสอบว่าอักขระชื่อรูปภาพไม่มีการเข้ารหัสพิเศษหรือตัวพิมพ์ใหญ่หรือไม่? คัดลอกและวางจากตัวอย่างข้อมูลของคุณใช้ได้สำหรับฉันในขณะที่docker run --rm foo! bashพิมพ์ข้อผิดพลาดเดียวกันกับของคุณ
gesellix

3
การพิจารณาโพสต์คำตอบนี้เพื่อให้หาคนต่อไปได้ง่ายขึ้น
lloiacono

4
การขยายค่าเงินดอลลาร์เป็นสองเท่าเสมอเว้นแต่คุณจะต้องการแยกสตริงออกเป็นคำ ๆ ที่นี่ใช้"$(pwd)"(รูปแบบสมัยใหม่ของ"`pwd`") docker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bashคำสั่งของคุณจะกลายเป็น
Martin Jambon

1
@gesellix ขอบคุณ. การคัดลอกวางคำสั่งจากคู่มือไม่ควรทำตั้งแต่แรกเมื่อเรียนรู้สิ่งใหม่ ๆ นอกจากนั้นอาจทำให้เกิดความเจ็บปวดอย่างคาดไม่ถึงเมื่อมีสัญลักษณ์ที่เสียหายอย่างลับๆเข้ามาเกี่ยวข้อง สิ่งที่ดีที่ฉันเห็นความคิดเห็นของคุณก่อนที่จะใช้เวลาสองชั่วโมงหรือครึ่งวันกับ "ข้อผิดพลาด" ดังกล่าว ^ _ ^
Den Drobiazko

คำตอบ:


101

ใน powershell คุณควรใช้${pwd}vs$(pwd)


7
นี่คือสิ่งที่ทำให้ฉันเอาหัวโขกกำแพง (บางครั้งฉันก็เกลียด 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 trueมีอะไรผิดปกติกับคำสั่งของฉัน? นอกจากนี้ยังให้ข้อผิดพลาดเดียวกัน
พอล

ขอบคุณมาก!
Andrew Brennan

... และ$pwdไม่ได้ผลซึ่งเป็นสิ่งที่ชัดเจน
Timo

48

อาร์กิวเมนต์แรกหลังจาก "run" ที่ไม่ใช่แฟล็กหรือพารามิเตอร์ของแฟล็กจะถูกแยกวิเคราะห์เป็นชื่อรูปภาพ เมื่อการแยกวิเคราะห์ล้มเหลวระบบจะแจ้งให้คุณทราบรูปแบบการอ้างอิงชื่อรูปภาพ (แต่อาจเป็นรหัสรูปภาพรูปภาพที่ตรึงหรือไวยากรณ์อื่น ๆ ) ไม่ถูกต้อง ในคำสั่งของคุณ:

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

ชื่ออิมเมจ "superly_anpr" ถูกต้องดังนั้นคุณต้องดูคำสั่งก่อนหน้านี้ ในกรณีนี้ข้อผิดพลาดมักเกิดจากการpwdส่งออกพา ธ ที่มีช่องว่างอยู่ ทุกอย่างหลังจากเว้นวรรคไม่ใช่พารามิเตอร์อีกต่อไป-vและนักเทียบท่าพยายามแยกวิเคราะห์เป็นชื่ออิมเมจ การแก้ไขคือการอ้างอิงพารามิเตอร์โวลุ่มเมื่อคุณไม่สามารถรับประกันได้ว่าไม่มีช่องว่างหรืออักขระพิเศษอื่น ๆ

เมื่อคุณทำเช่นนั้นคุณจะพบกับข้อผิดพลาดถัดไป "ไม่พบปฏิบัติการ" ทุกอย่างหลังชื่ออิมเมจจะถูกแยกวิเคราะห์เป็นคำสั่งเพื่อเรียกใช้ภายในคอนเทนเนอร์ ในกรณีของคุณมันจะพยายามเรียกใช้คำสั่ง--rm -it bashซึ่งเกือบจะล้มเหลวอย่างแน่นอนเนื่องจาก--rmจะไม่มีอยู่เป็นไบนารีภายในภาพของคุณ คุณต้องเรียงลำดับพารามิเตอร์ใหม่เพื่อแก้ไขปัญหา:

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

ฉันมีรายละเอียดเพิ่มเติมเกี่ยวกับข้อผิดพลาดทั้งสองนี้และสาเหตุในสไลด์ของฉันที่นี่: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29


3
สไลด์ 30 ช่วยแก้ปัญหาของฉัน ฉันมีไฟล์. sh ที่ทำงานใน Cygwin ฉันเปลี่ยนไป # !/bin/bash(สังเกตช่องว่างระหว่าง#และ!ถึง#!/bin/bash และEnd of Line SequenceจากCRLFถึงLFแล้วนั่นคือทั้งหมดที่ฉันทำขอบคุณ @BMitch สำหรับการแบ่งปันสไลด์
blongho

19

ฉันมีปัญหาเดียวกันเมื่อฉันcopy-pastedออกคำสั่ง แต่เมื่อฉันพิมพ์คำสั่งทั้งหมดมันใช้งานได้!

โชคดี...


5
ว้าวนี่ช่วยได้จริง
Matjag

5
ใช่สำหรับฉันมันถูก--nameวาง-เนื่องจากตัวแก้ไขเปลี่ยนมันโดยอัตโนมัติ ขอบคุณที่ช่วยฉันไว้
Rvy Pandey

8

ฉันมีปัญหาที่คล้ายกัน ปัญหาที่ฉันพบคือ$(pwd)มีช่องว่างในนั้นซึ่งกำลังขว้างนักเทียบท่าวิ่งหนี

เปลี่ยนชื่อไดเร็กทอรีเพื่อไม่ให้มีช่องว่างในนั้นและควรใช้งานได้หากเป็นปัญหา


5

ฉันพบปัญหานี้เมื่อฉันไม่มีชุดตัวแปรสภาพแวดล้อม

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

repoและimage_nameถูกกำหนดไว้ แต่tagไม่ใช่

ซึ่งส่งผลให้ docker push repo/image_name:นี้ส่งผลให้

ซึ่งโยน docker: invalid reference format.


ฉันมีปัญหาเดียวกันและฉันแก้ไขโดยตั้งค่าแท็กการส่งออกตัวแปรสภาพแวดล้อมที่ขาดหายไป = ล่าสุด
PHZ.fi-Pharazon

docker buildล้มเหลวสำหรับฉันเมื่อเปิดข้อผิดพลาดFROM ${ORG}/ci-common:${CI_COMMON_VERSION} as builderนี้ ปรากฎว่าเกิดจากการพิมพ์ผิดอย่างง่ายในก่อนหน้านี้ARG CI_COMMON_VERION=2(ไม่มี an S) ซึ่งฉันได้คัดลอกมาจากสคริปต์อื่นซึ่งมีการพิมพ์ผิดนี้ทุกที่และทำงานได้ดี
CodeManX

1

พบว่าการใช้docker-compose configรายงานว่าปัญหาคืออะไร

ในกรณีของฉันไฟล์เขียนทับที่มีรายการที่ไม่ได้ลบล้างอะไรเลย


1

สำหรับคนอื่น ๆ มาที่นี่:
ถ้าคุณบังเอิญใส่คำสั่งนักเทียบท่าในไฟล์ให้พูดว่าrun.shให้ตรวจสอบตัวคั่นบรรทัดของคุณ ใน Linux ควรเป็นไม่LRเช่นนั้นคุณจะได้รับข้อผิดพลาดเดียวกัน


0

สิ่งนี้ยังเกิดขึ้นเมื่อคุณใช้นักเทียบท่าการพัฒนาเช่นด้านล่างในการผลิต คุณไม่ต้องการสร้างภาพในการผลิตเนื่องจากทำลายอุดมการณ์ของตู้คอนเทนเนอร์ เราควรปรับใช้อิมเมจ:

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

เปลี่ยนเป็นภาพที่สร้างขึ้น:

  web:
    command: /bin/bash run.sh
    image: registry.voxcloud.co.za:9000/dyndns_api_web:0.1
    ports:
      - "8000:8000"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.