docker:参考格式无效

时间:2017-08-14 19:49:10

标签: docker

我遵循本教程: https://medium.com/towards-data-science/number-plate-detection-with-supervisely-and-tensorflow-part-1-e84c74d4382c

他们使用docker。当我尝试运行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个小时,我真的不明白什么是错的。任何想法都非常感激。

13 个答案:

答案 0 :(得分:32)

在powershell中,您应该使用$(pwd)T= np.arange(1,4,1) J= 1.0/T print(("{:.2f}, "*len(J)).format(*J))

答案 1 :(得分:17)

“运行”之后不是标志或标志参数的第一个参数被解析为图像名称。当解析失败时,它将告诉您引用格式(即图像名称(但可以是图像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

答案 2 :(得分:5)

我没有设置环境变量时遇到了这个问题。

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

repoimage_name已定义,但tag未定义。

这产生了docker push repo/image_name:

哪个扔了docker: invalid reference format.

答案 3 :(得分:3)

我在一行中执行了整个命令,正如前面提到的

+-------------------------------+------+---------------------------+
|             name              | type |         type_desc         |
+-------------------------------+------+---------------------------+
| OrderItems2                   | TF   | SQL_TABLE_VALUED_FUNCTION |
| kaeGetActiveClientList        | P    | SQL_STORED_PROCEDURE      |
| rpt_InvoiceClient             | P    | SQL_STORED_PROCEDURE      |
| kaeGetCallCountsAnsw          | P    | SQL_STORED_PROCEDURE      |
| rpt_CombinedCampaign          | P    | SQL_STORED_PROCEDURE      |
| ReportStatusXML               | FN   | SQL_SCALAR_FUNCTION       |
| kaeGetACMGInBoundSalesByAgent | P    | SQL_STORED_PROCEDURE      |
| ssisSempris                   | P    | SQL_STORED_PROCEDURE      |
| kaeGetAgentPay_WK             | P    | SQL_STORED_PROCEDURE      |
| trig_tblClientsLastModified   | TR   | SQL_TRIGGER               |
+-------------------------------+------+---------------------------+

但它应该是一个多行命令,并且我逐行复制了命令行,并在每一行之后按了 $ docker run --name testproject-agent \ -e TP_API_KEY="REPLACE_WITH_YOUR_KEY" \ -e TP_AGENT_ALIAS="My First Agent" \ testproject/agent:latest ,砰!它奏效了。

有时当您从网络复制时,enter 字符会被省略,因此我建议您尝试手动引入新行。

答案 4 :(得分:2)

copy-pasted命令时遇到相同的问题。相反,当我键入整个命令时,它起作用了!

祝你好运...

答案 5 :(得分:1)

我有类似的问题。 我当时遇到的问题是$(pwd)那里有一个空间,该空间正在使Docker径流运行。

  

更改目录名称,以使目录名称中没有空格,并且在出现问题时应该可以使用

答案 6 :(得分:1)

发现使用docker-compose config报告了问题所在。

就我而言,是一个覆盖撰写文件,其中的条目是不覆盖任何内容

答案 7 :(得分:1)

其他人请到这里:
如果碰巧将docker命令放在文件中,例如说run.sh,请检查行分隔符。在Linux中,它应该为 LR ,否则您将收到相同的错误。

答案 8 :(得分:1)

我在 Linux 上遇到了一些问题。那是因为目录名称包含空格。我使用 "$(pwd)/path/to/go" 而不是 $(pwd)/path/to/go

修复了它

答案 9 :(得分:0)

我有同样的问题。我试图编写一个bash脚本以在远程服务器上运行docker容器,但是遇到了相同的错误docker: invalid reference format.

old-start-container.sh

#!/bin/bash
docker run -p 80:5000 'dockerrepo/imagename:tag'

这就是我修复它的方式。我使用bash command substitution来使docker命令正确运行。

new-start-container.sh

#!/bin/bash
$(docker run -p 80:5000 'dockerrepo/imagename:tag')

答案 10 :(得分: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"

答案 11 :(得分:0)

我在通过 powershell 使用 $(pwd) 时遇到了同样的问题,我用 ${pwd} 替换了它,它对我有用。

以下是相同的细节:

PS C:\Users\Systems\git\mastery\dockerfile> docker container run -d --name nginx -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx
docker: invalid reference format.
See 'docker run --help'.

PS C:\Users\Systems\git\mastery\dockerfile> docker container run -d --name nginx -p 8080:80 -v ${pwd}:/usr/share/nginx/html nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
Digest: sha256:25975292693bcc062becc20a1608936927f9950a42fb4474088f6292dacd4ec9
Status: Downloaded newer image for nginx:latest
f6ff08ed3b73095e85474bd2f248a7cae6b5bcdb53e12e4824d235df3cd268aa

答案 12 :(得分:0)

我删除了 () 并像这样为我工作 docker run -d -v $pwd/envoy.yaml:/etc/envoy/envoy.yaml:ro -p 8080:8080 -p 9901:9901 我正在使用 Windows 10

相关问题