使用我的一个项目进入Docker错误:
invalid reference format: repository name must be lowercase
此通用消息的各种原因是什么?
经过一番努力后我已经弄清楚了,所以我要回答我自己的问题,以便在此处记录,因为在进行网络搜索时,解决方案不会马上出现,而且因为此错误消息没有没有描述Docker遇到的直接问题。
答案 0 :(得分:8)
泊坞窗中的“引用”是指向图像的指针。它可能是图像名称,图像ID,名称中包括注册表服务器,使用sha256标签固定图像以及其他任何可用于指向您要运行的图像的
。 invalid reference format
错误消息表示docker无法将您提供的字符串转换为图像。这可能是无效的名称,也可能是来自docker run
命令行前面的解析错误的原因,如果这是运行图像的方式。对于撰写文件,如果在图像名称中扩展变量,则该变量可能无法正确扩展。
在docker run
命令行中,这通常是导致不用空格引用参数,并弄错了命令行顺序的结果。命令行顺序为:
docker ${args_to_docker} run ${args_to_run} image_ref ${cmd_to_exec}
将args传递给运行时最常见的错误是卷映射扩展了路径名,该路径名中包含空格,而不引用路径或转义该空格。例如
docker run -v $(pwd):/data image_ref
解决方法很简单:
docker run -v "$(pwd):/data" image_ref
答案 1 :(得分:7)
在我的情况下,问题出在参数安排上。最初我在环境参数之后有--name
参数,然后是volume和attach_dbs
参数,并且在命令末尾有图像,如下所示。
docker run -p 1433:1433 -e sa_password=myComplexPwd -e ACCEPT_EULA=Y --name sql1 -v c:/temp/:c:/temp/ attach_dbs="[{'dbName':'TestDb','dbFiles':['c:\\temp\\TestDb.mdf','c:\\temp\\TestDb_log.ldf']}]" -d microsoft/mssql-server-windows-express
重新排列下面的参数后,一切正常(基本上放--name
参数后跟图片名称)。
docker run -d -p 1433:1433 -e sa_password=myComplexPwd -e ACCEPT_EULA=Y --name sql1 microsoft/mssql-server-windows-express -v C:/temp/:C:/temp/ attach_dbs="[{'dbName':'TestDb','dbFiles':['C:\\temp\\TestDb.mdf','C:\\temp\\TestDb_log.ldf']}]"
答案 2 :(得分:6)
在当前工作目录中有一个空间,并使用$(pwd)
来映射卷。不喜欢目录名称中的空格。
答案 3 :(得分:3)
就我而言,<<
中定义的图像名称包含大写字母。提及sort(payroll_size, payroll_size + 5, [](const Employee& a, const Employee& b) { return a.employeeName < b. employeeName; });
而不是docker-compose.yml
的错误消息无法帮助描述问题,需要一段时间才能弄明白。
答案 4 :(得分:3)
在MacOS上使用iCloud驱动器时,$ PWD将包含目录“移动文档”。似乎不喜欢这个空间!
作为一种解决方法,我将项目复制到本地驱动器,其中项目文件夹路径中没有空间。
我看不到可以绕开iCloud的默认路径~/Library/Mobile Documents/com~apple~CloudDocs
“移动文档”路径中的空间似乎是docker run不喜欢的。
答案 5 :(得分:1)
对我来说,问题在于卷映射中无法逃脱的空间。正在运行docker run命令的jenkins作业中有一个空格,结果docker引擎无法理解docker run命令。
答案 6 :(得分:1)
让我强调一下, Docker甚至不允许混合字符。
好:
docker build -t myfirstechoimage:0.1 .
错误:
docker build -t myFirstEchoImage:0.1 .
答案 7 :(得分:0)
我解决了这个问题,在我的 Dockerfile
上更改了一些大写单词,例如:
FROM Base as Build
RUN npm run Build:prod
到
FROM base as build
RUN npm run build:prod
另一个地方:
FROM Base as Release
COPY --from=Build /usr/path/here/dist/ ./dist
到
FROM base as Release
COPY --from=build /usr/path/here/dist/ ./dist
答案 8 :(得分:0)
在我的情况下,我有一个赤裸的npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! syscall access
npm ERR! path /usr/local/lib/node_modules
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR! [Error: EACCES: permission denied, access '/usr/local/lib/node_modules'] {
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'access',
npm ERR! path: '/usr/local/lib/node_modules'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.
开关,即没有实际的变量名或值的开关,例如:
--env
答案 9 :(得分:0)
在我的案例中,DockerFile包含映像名称,大小写混合,而不是小写。
我的DockerFile中的较早行
FROM CentOs
当我在上方切换到FROM centos
时,它运行正常。
答案 10 :(得分:0)
Docker中的reference
指向映像。这可以在远程注册表或本地注册表中。首先让我描述错误消息,然后显示解决方案。
无效的参考格式
这意味着我们使用的引用不是有效格式。这意味着我们用来识别图像的参考(指针)无效。通常,其后进行如下描述。这将使错误更加清楚。
无效的引用格式:存储库名称必须为小写
这意味着我们正在使用的引用不应包含大写字母。尝试运行docker run Ubuntu
(错误)与docker run ubuntu
(正确)。 Docker不允许任何大写字符作为图像引用。简单的故障排除步骤。
1) Dockerfile 包含大写字母作为图像。
FROM Ubuntu (wrong)
FROM ubuntu (correct)
2)在 docker-compose.yml 中定义的图像名称具有大写字母
3)如果使用Jenkins或GoCD部署docker容器,请检查run命令,镜像名称是否包含大写字母。
请阅读专门针对此错误而写的this document。
答案 11 :(得分:0)
在我的情况下,是mysql docker参数之前的-e
docker run --name mysql-standalone -e MYSQL_ROOT_PASSWORD=hello -e MYSQL_DATABASE=hello -e MYSQL_USER=hello -e MYSQL_PASSWORD=hello -d mysql:5.6
还要检查是否缺少空格
答案 12 :(得分:0)
上面的大多数答案都不适用于我的情况,因此,如果有人觉得有帮助,我将对此进行记录。对于我的情况,在dockerfile FROM node:10
中的第一行,单词 node 不应为大写,即FROM NODE:10
。我进行了更改,并且有效。
答案 13 :(得分:0)
我希望错误消息将输出问题字符串。由于“ docker run”命令的奇怪的复制和粘贴问题,我得到了这个。在回购和图片名称之前使用了类似于空格的 字符。
答案 14 :(得分:0)
有时会错过-e标志,而内联多个特定环境变量
例如
错误:docker run --name somecontainername -e ENV_VAR1=somevalue1 ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
好:docker run --name somecontainername -e ENV_VAR1=somevalue1 -e ENV_VAR2=somevalue2 -d -v "mypath:containerpath" <imagename e.g. postgres>
答案 15 :(得分:0)
就我而言,我试图通过docker运行postgres。最初,我的运行方式是:
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=test_password POSTGRES_USER=test_user POSTGRES_DB=test_db --rm -v ~/docker/volumes/postgres:/var/lib/postgresql/data --name pg-docker postgres
每个环境变量后我都缺少 -e 。将上面的命令更改为下面的命令
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=test_password -e POSTGRES_USER=test_user -e POSTGRES_DB=test_db --rm -v ~/docker/volumes/postgres:/var/lib/postgresql/data --name pg-docker postgres
答案 16 :(得分:0)
Docker可以通过阅读Dockerfile中的指令来自动构建映像。 Dockerfile是一个文本文档,其中包含用户可以在命令行上调用以组装映像的所有命令。 例: 来自python:3.7-alpine “ python”应为小写
答案 17 :(得分:0)
“ docker build -f Dockerfile -t SpringBoot-Docker”。 就像上面的推荐一样,我们正在为docker容器创建一个图像文件。值得推荐的是,创建映像使用文件( -f表示docker文件),而-t是我们要推送到docker的映像文件的目标。 “。”代表当前目录
上述问题的解决方案:以小写形式提供目标图像名称
答案 18 :(得分:0)
实际上,截至今天(码头2e2f252f3c88679f1207d87d57c07af6819a1a17e22573bcef32804122d2f305
)的Docker注册表不处理包含大写字符的路径。这显然是一个糟糕的设计选择,可能是由于想要与某些在文件级别不区分大小写的操作系统保持兼容(例如, windows )。
如果对某个范围进行了身份验证,并尝试使用所有小写字母获取不存在的存储库,则输出为
(auth step not shown)
curl -s -H "Authorization: Bearer $TOKEN" -X GET https://$LOCALREGISTRY/v2/test/someproject/tags/list
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"repository","Class":"","Name":"test/someproject","Action":"pull"}]}]}
但是,如果尝试使用大写字母组件执行此操作,则仅返回404:
(authorization step done but not shown here)
$ curl -s -H "Authorization: Bearer $TOKEN" -X GET https://docker.uibk.ac.at:443/v2/test/Someproject/tags/list
404 page not found
答案 19 :(得分:0)
之所以发生这种情况,是因为当前工作目录中的空间来自<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>boot-multi-module-example</artifactId>
<groupId>com.greg</groupId>
<version>1.0</version>
</parent>
<artifactId>config</artifactId>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
,用于地图卷。因此,我改用<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.greg</groupId>
<artifactId>boot-multi-module-example</artifactId>
<version>1.0</version>
</parent>
<artifactId>service</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- tag::actuator[] -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.greg</groupId>
<artifactId>service</artifactId>
<version>${project.version}</version>
</dependency>
<!-- end::actuator[] -->
<!-- tag::tests[] -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- end::tests[] -->
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
。
$(pwd)
文件。
docker-compose
答案 20 :(得分:0)
我有同样的错误,由于某种原因,它似乎是由运行docker run
命令的Jenkins作业中的大写字母引起的。
答案 21 :(得分:0)
替换image: ${DOCKER_REGISTRY}notificationsapi
与image:notificationsapi
或image: ${docker_registry}notificationsapi
docker-compose.yml中的问题确实解决了
文件错误
version: '3.4'
services:
notifications.api:
image: ${DOCKER_REGISTRY}notificationsapi
build:
context: .
dockerfile: ../Notifications.Api/Dockerfile
文件无错误
version: '3.4'
services:
notifications.api:
image: ${docker_registry}notificationsapi
build:
context: .
dockerfile: ../Notifications.Api/Dockerfile
所以我认为错误是由于非小写字母引起的
答案 22 :(得分:-2)
尝试在DockerFile中使用小写字符
例如,使用:
openjdk:8
代替
openJDK:8