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

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
马丁·詹邦(David Jambon)

1
@gesellix谢谢。学习新内容时,不应首先从手册进行复制粘贴命令,而且当涉及一些偷偷摸摸的损坏符号时,它可能带来意外的痛苦。我花了两个小时或半天的时间解决此类“错误”之前看到了您的评论^ _ ^
Den Drobiazko

Answers:


88

在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

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,docker尝试将其解析为映像名称。解决方法是在无法保证卷参数没有空格或其他特殊字符的情况下引用卷参数。

当您这样做时,您将遇到下一个错误“找不到可执行文件”。映像名称之后的所有内容都将解析为在容器内运行的命令。在您的情况下,它将尝试运行该命令--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 解决了我的问题。我在Cygwin中运行了一个.sh文件。我改变了 # !/bin/bash(注意之间的空间#,并!#!/bin/bashEnd of Line SequenceCRLFLF的共享幻灯片感谢@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报告了问题所在。

在我的情况下,覆盖撰写文件中的条目覆盖了none


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"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.