Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker图像参考格式_Docker_Docker Compose - Fatal编程技术网

Docker图像参考格式

Docker图像参考格式,docker,docker-compose,Docker,Docker Compose,我正在尝试编写一个docker compose.yml,然后在持续集成管道中使用,但也可以在本地使用 我天真地试过: 在mygitlab ci.yml中,我登录到映像服务器: echo ${IMAGE_SERVER_PASSWORD} | docker login -u ${IMAGE_SERVER_USERNAME} --password-stdin ${IMAGE_SERVER_URL} 然后我就可以做了 docker-compose build --pull docker-compose

我正在尝试编写一个
docker compose.yml
,然后在持续集成管道中使用,但也可以在本地使用

我天真地试过: 在my
gitlab ci.yml
中,我登录到映像服务器:

echo ${IMAGE_SERVER_PASSWORD} | docker login -u ${IMAGE_SERVER_USERNAME} --password-stdin ${IMAGE_SERVER_URL}
然后我就可以做了

docker-compose build --pull
docker-compose push
那么问题是什么呢? 当vscode中的
.devcontainer
尝试构建应用程序时,我得到
错误:无效的引用格式
,这当然是由于

/image-name:latest
不是有效的图像名称。所以问题是斜杠

docker compose
当前不接受(cf.),因此这是不可能的。我当然可以在环境变量中包含斜杠,但我觉得这会在其他地方引起类似的问题


在格式化动态图像名称时,有没有最佳做法?

有两种解决方案可以满足OP的要求

一种是将
docker compose.yml
中的
IMAGE\u SERVER\u URL
的默认值设置为非空字符串(就像OP对
IMAGE\u标记所做的那样)

另一个是在
docker compose.yml
旁边的
文件中设置所述默认值

只要开发者不打算将其本地构建的映像推送到回购协议,那么默认值是什么就不重要了,只要它不是空的

根据,在这两种情况下,CI服务器在shell中设置的变量应覆盖默认值

编辑:
另一种解决方案,在我看来不那么优雅,就是在
docker compose.yml
中使用
${IMAGE\u SERVER\u URL:?Variable IMAGE\u SERVER\u URL必须设置为非空字符串}
,以生成更易于理解的错误消息。

有两种解决方案可以满足OP的要求

一种是将
docker compose.yml
中的
IMAGE\u SERVER\u URL
的默认值设置为非空字符串(就像OP对
IMAGE\u标记所做的那样)

另一个是在
docker compose.yml
旁边的
文件中设置所述默认值

只要开发者不打算将其本地构建的映像推送到回购协议,那么默认值是什么就不重要了,只要它不是空的

根据,在这两种情况下,CI服务器在shell中设置的变量应覆盖默认值

编辑:
另一个在我看来不那么优雅的解决方案是在
docker compose.yml
中使用
${IMAGE\u SERVER\u URL:?Variable IMAGE\u SERVER\u URL必须设置为非空字符串}
,以生成更易于理解的错误消息。

您可以将服务器URL默认为docker Hub的公共名称
docker.io
。如果您使用的是库中的官方图像,还可以将
library
作为存储库名称:

${IMAGE_SERVER_URL:-docker.io}/image_name:${IMAGE_TAG:-latest}

您可以将服务器url默认为Docker Hub的通用名称
Docker.io
。如果您使用的是库中的官方图像,还可以将
library
作为存储库名称:

${IMAGE_SERVER_URL:-docker.io}/image_name:${IMAGE_TAG:-latest}


有什么原因不能在本地设置变量IMAGE\u SERVER\u URL吗?@KonradBotor您的意思是只在本地附加斜杠?当然,这会起作用——只是让一切变得更加脆弱——我想这是一个解决方案,但我考虑的是
export IMAGE\u SERVER\u URL=something;代码。
@KonradBotor花了我一段时间才意识到,你实际上是指vscode中的
code
,而不是更多代码的占位符。是的,我想您可以将环境变量设置为localy。但是错误消息不是很具有描述性,如果其他开发人员退出项目,他们也会遇到这个问题。我试图在这里建立一个模板:-pIs,你为什么不能在本地设置变量IMAGE\u SERVER\u URL?@KonradBotor你的意思是只在本地附加斜杠?当然,这会起作用——只是让一切变得更加脆弱——我想这是一个解决方案,但我考虑的是
export IMAGE\u SERVER\u URL=something;代码。
@KonradBotor花了我一段时间才意识到,你实际上是指vscode中的
code
,而不是更多代码的占位符。是的,我想您可以将环境变量设置为localy。但是错误消息不是很具有描述性,如果其他开发人员退出项目,他们也会遇到这个问题。我想在这里建立一个模板:-pdo你知道图像文件结构深度的限制吗?也就是说,是否允许我任意使用
folder1/folder2/…/foldern/image\u name:tag
?因为如果我有一个更深层的命名结构,这可能会对以后产生影响,如果URL的处理方式与文件夹不同,那么可能会破坏默认的
IMAGE\u SERVER\u URL
。我找不到任何关于
有效引用格式的信息,这很烦人,因为错误
无效引用格式
显然存在。关于Docker官方注册表实现所述引用格式的方式:。如果我理解正确,您最多可以有
server\u url/path/path/name:tag
,但我想可能还有其他注册表实现支持更长的路径。你可能想问一个单独的问题。那么,如果我将图像声明为
绝对不是\u a\u服务器\u url/folder1/folder2/name:tag
,会发生什么?如果它只是阻止您推送图像,那么在某些情况下,这甚至可以防止意外发布私有图像,因为据我所知,推送将失败,但否则它应该可以正常工作。@FelixB。一些注册中心支持更深的嵌套,但通常只看到两层,一个组织或用户,然后是一个特定的映像。API本身并不限制您变得更加复杂,但各种实现可能会阻止您在命名约定之外定义存储库。您知道图像的文件结构深度限制吗?即