docker:無効な参照形式


104

私はこのチュートリアルに従っています:https : //medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

そして彼らはドッカーを使用しています。docker(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 2017

5
同様@TarunLalwaniと@Olegは、あなたが移動する必要があります言及した--rm-itして-間runおよびイメージ名を。ただし、エラーメッセージは説明されません。画像名の文字に特別なエンコーディングや大文字がないかどうかを確認しましたか?スニペットからコピーして貼り付けるとうまくいきますがdocker run --rm foo! bash、同じエラーが表示されます。
gesellix 2017

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ありがとうございます。新しいものを学ぶときに、最初からマニュアルからコピーして貼り付けるコマンドを実行するべきではありません。また、不正な破損シンボルが含まれていると、予期しない痛みが発生する可能性があります。そのような「エラー」に2時間または半日費やす前にあなたのコメントを見て
良かった

回答:


88

PowerShellでは${pwd}vs を使用する必要があります$(pwd)


7
これが頭を壁にぶつけた原因です(M $ FTが嫌いなこともあります)
ビアウィン

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私のコマンドの何が問題になっていますか?また、同じエラーが発生します。
ポール

どうもありがとうございます!
アンドリューブレナン

45

フラグまたはフラグのパラメーターではない「実行」の後の最初の引数は、イメージ名として解析されます。その解析が失敗すると、参照形式、つまりイメージ名(ただし、イメージID、ピン留めされたイメージ、またはその他の構文)が無効であることを通知します。あなたのコマンドで:

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

イメージ名「supervisely_anpr」は有効であるため、コマンドの前の方を確認する必要があります。この場合、エラーはpwdスペースが含まれているパスの出力が原因である可能性が高いです。スペースの後のすべてはもはやパラメーターではなく-v、ドッカーはそれをイメージ名として解析しようとします。修正は、スペースやその他の特殊文字がないことを保証できない場合にボリュームパラメータを引用することです。

そうすると、次のエラー「executable not found」が発生します。イメージ名の後のすべては、コンテナ内で実行するコマンドとして解析されます。あなたの場合、イメージ内にバイナリとして存在しないため--rm -it bash、ほぼ確実に失敗するコマンドを実行しようとし--rmます。それを解決するには、パラメーターを並べ替える必要があります。

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

これら2つのエラーと原因の詳細については、こちらのスライドをご覧ください。https//sudo-bmitch.github.io/presentations/dc2018/faq-stackoverflow-lightning.html#29


3
スライド30は 解か私の問題を。Cygwinで.shファイルを実行しました。私は変更 # !/bin/bash(予告スペースの間#!する#!/bin/bash と、その後End of Line SequenceからCRLFLF私がしたすべてだったことのスライドを共有するためのおかげで@BMitchを。。。
blongho

10

私がcopy-pasted命令したとき、私は同じ問題を抱えていました。代わりに、コマンド全体を入力すると、うまくいきました!

幸運を...


2
うわー、これは実際に役立ちました。
Matjag

3
ええ、私にとっては、編集者が自動変更するために--name貼り付けられまし-た。私の時間を節約してくれてありがとう。
Rvy Pandey

7

同様の問題がありました。私が抱え$(pwd)ていた問題は、Dockerのランオフをスローするスペースがそこにあったことでした。

そこにスペースがないようにディレクトリ名を変更し、これが問題である場合は機能するはずです


3

環境変数を設定していないときにこの問題に遭遇しました。

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

repoimage_name定義されましたが、そうでtagはありませんでした。

これはをもたらしましたdocker push repo/image_name:

投げた docker: invalid reference format.


同じ問題があり、不足している環境変数export tag = latest
PHZ.fi-Pharazon

1

使用するdocker-compose configと問題が何であるかが報告されていることがわかりました。

私の場合、何もオーバーライドしていないエントリを持つオーバーライド構成ファイル。


0

これは、本番環境で以下のように開発用docker composeを使用した場合にも発生します。コンテナーのイデオロギーを壊すため、本番環境でイメージを構築することは望ましくありません。イメージをデプロイする必要があります。

  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.