docker: định dạng tham chiếu không hợp lệ


104

Tôi đang làm theo hướng dẫn này: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

và họ sử dụng docker. Khi tôi cố gắng chạy docker (bên trong tập lệnh run.sh):

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

Tôi gặp lỗi:

docker: invalid reference format.

Tôi đã dành 2 giờ và tôi thực sự không thể hiểu có chuyện gì. Bất kỳ ý tưởng thực sự đánh giá cao.


3
Hãy thử điều nàydocker run -p 8888:8888 -v "`pwd`/../src":/src -v "`pwd`/../data":/data -w /src --rm -it supervisely_anpr bash
Tarun Lalwani

5
Giống như @TarunLalwani và @Oleg đã đề cập, bạn sẽ cần di chuyển --rm-itở giữa runvà tên hình ảnh. Tuy nhiên, điều đó sẽ không giải thích thông báo lỗi. Bạn đã kiểm tra xem các ký tự tên hình ảnh không có bất kỳ mã hóa hoặc chữ hoa đặc biệt nào chưa? Sao chép & Dán từ đoạn mã của bạn phù hợp với tôi, trong khi docker run --rm foo! bashin ra cùng một lỗi như của bạn.
gesellix

3
xem xét đăng câu trả lời cho điều này để dễ dàng tìm thấy anh chàng tiếp theo hơn
lloiacono

4
Luôn luôn trích dẫn kép các khoản mở rộng bằng đô la trừ khi bạn thực sự muốn chia chuỗi thành các từ. Ở đây, sử dụng "$(pwd)"(dạng hiện đại của "`pwd`"). Lệnh của bạn trở thành docker run -p 8888:8888 -v "$(pwd)"/../src:/src -v "$(pwd)"/../data:/data -w /src supervisely_anpr --rm -it bash.
Martin Jambon

1
@gesellix cảm ơn bạn. Việc sao chép-dán các lệnh từ sách hướng dẫn không nên được thực hiện ngay từ đầu khi học những thứ mới, ngoài ra nó có thể mang lại nỗi đau bất ngờ khi một số biểu tượng bị hỏng lén lút dính vào. Điều tốt mà tôi thấy nhận xét của bạn trước khi mất hai giờ hoặc nửa ngày về "lỗi" như vậy ^ _ ^
Den Drobiazko

Câu trả lời:


88

Trong powershell bạn nên sử dụng ${pwd}vs$(pwd)


7
Đây là những gì khiến tôi đập đầu mình vào tường (đôi khi tôi ghét 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 truecó gì sai với lệnh của tôi? Nó cũng đưa ra lỗi tương tự.
paul

Cảm ơn bạn rất nhiều!
Andrew Brennan

45

Đối số đầu tiên sau "run" không phải là cờ hoặc tham số của cờ được phân tích cú pháp dưới dạng tên hình ảnh. Khi phân tích cú pháp đó không thành công, nó sẽ cho bạn biết định dạng tham chiếu, hay còn gọi là tên hình ảnh (nhưng có thể là id hình ảnh, hình ảnh được ghim hoặc cú pháp khác) không hợp lệ. Theo lệnh của bạn:

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

Tên hình ảnh "supervisely_anpr" là hợp lệ, vì vậy bạn cần xem lệnh sớm hơn. Trong trường hợp này, rất có thể lỗi do pwdxuất ra một đường dẫn có khoảng trắng trong đó. Mọi thứ sau khoảng trắng không còn là một tham số -vvà docker cố gắng phân tích cú pháp nó thành tên hình ảnh. Cách khắc phục là trích dẫn thông số âm lượng khi bạn không thể đảm bảo nó không có khoảng trắng hoặc các ký tự đặc biệt khác.

Khi bạn làm điều đó, bạn sẽ gặp phải lỗi tiếp theo, "không tìm thấy tệp thực thi". Mọi thứ sau tên hình ảnh được phân tích cú pháp như lệnh để chạy bên trong vùng chứa. Trong trường hợp của bạn, nó sẽ cố gắng chạy lệnh --rm -it bashmà hầu như chắc chắn sẽ thất bại vì --rmsẽ không tồn tại dưới dạng tệp nhị phân bên trong hình ảnh của bạn. Bạn cần sắp xếp lại các thông số để giải quyết vấn đề đó:

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

Tôi có thêm một số chi tiết về hai lỗi này và nguyên nhân trong các trang trình bày của mình tại đây: https://sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29


3
Trang trình bày 30 đã giải quyết vấn đề của tôi. Tôi có một tệp .sh đang chạy trong Cygwin. Tôi đã thay đổi # !/bin/bash(thông báo không gian giữa #!để #!/bin/bash và sau đó là End of Line Sequencetừ CRLFđể LFĐó là tất cả tôi đã làm Cảm ơn @BMitch cho việc chia sẻ các slide...
blongho

10

Tôi đã gặp vấn đề tương tự khi tôi copy-pastedra lệnh. Thay vào đó, khi tôi nhập toàn bộ lệnh, nó đã hoạt động!

Chúc may mắn...


2
Wow, điều này thực sự hữu ích.
Matjag

3
Yup, đối với tôi, nó được --namedán -do trình chỉnh sửa tự động thay đổi nó. Cảm ơn bạn đã tiết kiệm thời gian của tôi.
Rvy Pandey

7

Tôi đã có một vấn đề tương tự. Vấn đề tôi đang gặp phải là $(pwd)có một khoảng trống trong đó đã ném docker ra.

Thay đổi tên thư mục để không có khoảng trắng trong đó và nó sẽ hoạt động nếu đây là sự cố


3

Tôi gặp phải sự cố này khi tôi không có bộ biến môi trường.

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

repoimage_nameđã được xác định nhưng tagkhông.

Điều này dẫn đến docker push repo/image_name:.

Mà đã ném docker: invalid reference format.


Tôi gặp sự cố tương tự và tôi đã khắc phục bằng cách đặt thẻ xuất biến môi trường bị thiếu = mới nhất
PHZ.fi-Pharazon

1

Tìm thấy rằng sử dụng docker-compose configbáo cáo vấn đề là gì.

Trong trường hợp của tôi, một tệp soạn thảo ghi đè với một mục nhập không ghi đè gì cả .


0

Điều này cũng xảy ra khi bạn sử dụng trình soạn thảo docker phát triển như bên dưới, trong sản xuất. Bạn không muốn xây dựng hình ảnh trong quá trình sản xuất vì điều đó phá vỡ tư tưởng về thùng chứa. Chúng ta nên triển khai các hình ảnh:

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

Thay đổi điều đó để sử dụng hình ảnh đã xây dựng:

  web:
    command: /bin/bash run.sh
    image: registry.voxcloud.co.za:9000/dyndns_api_web:0.1
    ports:
      - "8000:8000"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.