Vic*_*sky 42 docker docker-compose
以下命令失败,尝试从Docker Hub中提取图像:
$ docker-compose up -d
Pulling web-server (web-server:staging)...
ERROR: repository web-server not found: does not exist or no pull access
Run Code Online (Sandbox Code Playgroud)
但我只是想使用图像的本地版本,它存在:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web-server staging b94573990687 7 hours ago 365MB
Run Code Online (Sandbox Code Playgroud)
为什么Docker不在本地存储的图像中搜索?
这是我的Docker Compose文件:
version: '3'
services:
chat-server:
image: chat-server:staging
ports:
- "8110:8110"
web-server:
image: web-server:staging
ports:
- "80:80"
- "443:443"
- "8009:8009"
- "8443:8443"
Run Code Online (Sandbox Code Playgroud)
和我的.env文件:
DOCKER_HOST=tcp://***.***.**.**:2376
DOCKER_TLS_VERIFY=true
DOCKER_CERT_PATH=/Users/Victor/Documents/Development/projects/.../target/docker
Run Code Online (Sandbox Code Playgroud)
n2o*_*n2o 52
一般来说,这应该像你描述的那样工作.试图重现它,但它只是工作...
文件夹结构:
.
??? docker-compose.yml
??? Dockerfile
Run Code Online (Sandbox Code Playgroud)
Dockerfile的内容:
FROM alpine
CMD ["echo", "i am groot"]
Run Code Online (Sandbox Code Playgroud)
构建和标记图像:
docker build -t groot .
docker tag groot:latest groot:staging
Run Code Online (Sandbox Code Playgroud)
与docker-compose.yml:
version: '3.1'
services:
groot:
image: groot:staging
Run Code Online (Sandbox Code Playgroud)
并启动docker-compose:
$ docker-compose up
Creating groot_groot ...
Creating groot_groot_1 ... done
Attaching to groot_groot_1
groot_1 | i am groot
groot_groot_1 exited with code 0
Run Code Online (Sandbox Code Playgroud)
Min*_*hoi 15
2020 年 3 月 9 日编辑:
(docker 版本 18.09.9-ce build 039a7df,dockercompose 版本 1.24.0,build 0aa59064)
我发现只需创建一个 docker 容器,您就可以在使用假的本地注册表服务器标签 (localhost:5000/{image}) 标记容器后使用 docker-compose 'up -d'。
$ docker tag {imagename}:{imagetag} localhost:5000/{imagename}:{imagetag}
Run Code Online (Sandbox Code Playgroud)
您不需要运行本地注册服务器,但需要使用伪造的本地注册服务器 url 更改 dockercompose yaml 文件中的图像 url:
version: '3'
services:
web-server:
image: localhost:5000/{your-image-name} #change from {imagename}:{imagetag} to localhost:5000/{imagename}:{imagetag}
ports:
- "80:80"
Run Code Online (Sandbox Code Playgroud)
从 {imagename}:{imagetag} 到 localhost:5000/{imagename}:{imagetag}
然后就 -d
$ docker-compose -f {yamlfile}.yaml up -d
Run Code Online (Sandbox Code Playgroud)
如果您的本地机器中已有镜像 (localhost:5000/{imagename}),这将创建容器。
添加到@Tom Saleeba 的回复中,
用“/”标记容器后,我仍然遇到错误(例如victor-dombrovsky/docker-image:latest:)它一直在寻找来自远程 docker.io 服务器的图像。
registry_address/docker-image
Run Code Online (Sandbox Code Playgroud)
“/”之前的url似乎是注册表地址,“/”之后的url是图像名称。如果没有提供“/”,默认情况下 docker-compose 会从远程 docker.io 中查找图像。
它猜测这是docker-compose的一个已知错误
我终于通过运行本地注册表,使用注册表标签将映像推送到本地注册表,并从本地注册表中提取映像来使其工作。
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
$ docker tag your-image-name:latest localhost:5000/your-image-name
$ docker push localhost:5000/your-image-name
Run Code Online (Sandbox Code Playgroud)
然后更改 dockerfile 中的图像 url:
version: '3'
services:
chat-server:
image: chat-server:staging
ports:
- "8110:8110"
web-server:
image: localhost:5000/{your-image-name} #####change here
ports:
- "80:80"
- "443:443"
- "8009:8009"
- "8443:8443"
Run Code Online (Sandbox Code Playgroud)
聊天服务器图像也是如此。
Sha*_*anu 14
对我来说,“构建:” 成功了。我的工作 docker compose 文件如下所示,
version: '3.0'
services:
terraform:
build: .
image: tf:staging
env_file: .env
working_dir: /opt
volumes:
- ~/.aws:/.aws
Run Code Online (Sandbox Code Playgroud)
Den*_*soi 12
在您的docker-compose.yml中,您可以指定build: .而不是build: <username>/repo>本地构建(而不是从docker-hub中提取) - 我还无法验证这一点,但我相信您可以为多个服务执行相对路径docker-compose文件.
services:
app:
build: .
Run Code Online (Sandbox Code Playgroud)
参考:https://github.com/gvilarino/docker-workshop
Ant*_*zzi 12
您可以使用pull_policy:
image: img:tag
pull_policy: if_not_present
Run Code Online (Sandbox Code Playgroud)
Ben*_*ing 11
最简单的方法是切换image到相对目录中的build:并引用Dockerfile,如下图:
version: '3.0'
services:
custom_1:
build:
context: ./my_dir
dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)
这允许docker-compose在单个命令中管理整个构建和映像编排。
# Rebuild all images
docker-compose build
# Run system
docker-compose up
Run Code Online (Sandbox Code Playgroud)
您可能需要更改图像标记,以便用斜杠分隔两个部分/.而不是
chat-server:staging
Run Code Online (Sandbox Code Playgroud)
做类似的事情:
victor-dombrovsky/chat-server:staging
Run Code Online (Sandbox Code Playgroud)
我认为Docker标签背后有一些逻辑,"一部分"标签被解释为来自DockerHub的官方图像.
从 .env 文件的外观来看,您似乎已配置docker-compose为使用远程 docker 主机:
DOCKER_HOST=tcp://***.***.**.**:2376
Run Code Online (Sandbox Code Playgroud)
此外,此 .env 仅由 加载docker-compose,而不是由 加载docker。因此,在这种情况下,您的docker images输出并不代表运行docker-compose.
运行时,docker-compose您实际上是在远程主机上运行 Docker tcp://***.***.**.**:2376,而docker单独运行时,您是在本地运行 Docker。
当您运行 时docker images,您确实会看到本地存储在您的机器上的图像列表。但是docker-compose up -d将尝试不在本地计算机上启动容器,而是在***.***.**.**:2376. docker images除非您设置DOCKER_HOST环境变量,否则不会向您显示远程 Docker 主机上可用的图像,例如:
DOCKER_HOST=tcp://***.***.**.**:2376 docker images
Run Code Online (Sandbox Code Playgroud)
显然,远程 Docker 主机没有web-server:staging存储在那里的图像,也没有在 Docker 集线器上可用的图像。这就是 Docker 抱怨找不到镜像的原因。
如果您打算在本地运行容器,那么只需DOCKER_HOST=...从 .env 中删除该行并重试。
但是,如果您计划在给定的 DOCKER_HOST 上远程运行映像,那么您可能应该将其推送到存储库。您可以在 Docker Hub 创建一个免费的存储库,或者您可以在某个地方托管您自己的存储库,并用于docker push将图像推送到那里,然后确保您的 docker-compose.yml 引用了正确的存储库。
如果你不希望像推到码头工人集线器或主机自己的资源库,您还可以使用组合传输图像docker image save和docker image load:
docker image save web-server:staging | DOCKER_HOST=tcp://***.***.**.**:2376 docker image load
Run Code Online (Sandbox Code Playgroud)
请注意,对于大图像,这可能需要一段时间,尤其是在连接速度较慢的情况下。
| 归档时间: |
|
| 查看次数: |
43186 次 |
| 最近记录: |