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
但我只是想使用图像的本地版本,它存在:
$ docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
web-server           staging             b94573990687        7 hours ago         365MB
为什么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"
和我的.env文件:
DOCKER_HOST=tcp://***.***.**.**:2376
DOCKER_TLS_VERIFY=true 
DOCKER_CERT_PATH=/Users/Victor/Documents/Development/projects/.../target/docker
n2o*_*n2o 52
一般来说,这应该像你描述的那样工作.试图重现它,但它只是工作...
文件夹结构:
.
??? docker-compose.yml
??? Dockerfile
Dockerfile的内容:
FROM alpine
CMD ["echo", "i am groot"]
构建和标记图像:
docker build -t groot .
docker tag groot:latest groot:staging
与docker-compose.yml:
version: '3.1'
services:
  groot:
    image: groot:staging
并启动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
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}
您不需要运行本地注册服务器,但需要使用伪造的本地注册服务器 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"
从 {imagename}:{imagetag} 到 localhost:5000/{imagename}:{imagetag}
然后就 -d
$ docker-compose -f {yamlfile}.yaml up -d 
如果您的本地机器中已有镜像 (localhost:5000/{imagename}),这将创建容器。
添加到@Tom Saleeba 的回复中,
用“/”标记容器后,我仍然遇到错误(例如victor-dombrovsky/docker-image:latest:)它一直在寻找来自远程 docker.io 服务器的图像。
registry_address/docker-image
“/”之前的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
然后更改 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"
聊天服务器图像也是如此。
Sha*_*anu 14
对我来说,“构建:” 成功了。我的工作 docker compose 文件如下所示,
version: '3.0'
services:
  terraform:
    build: .
    image: tf:staging
    env_file: .env
    working_dir: /opt
    volumes:
      - ~/.aws:/.aws
Den*_*soi 12
在您的docker-compose.yml中,您可以指定build: .而不是build: <username>/repo>本地构建(而不是从docker-hub中提取) - 我还无法验证这一点,但我相信您可以为多个服务执行相对路径docker-compose文件.
services:
  app:
    build: .
参考:https://github.com/gvilarino/docker-workshop
Ant*_*zzi 12
您可以使用pull_policy:
image: img:tag
pull_policy: if_not_present
Ben*_*ing 11
最简单的方法是切换image到相对目录中的build:并引用Dockerfile,如下图:
version: '3.0'
services:
  custom_1:
    build:
      context: ./my_dir
      dockerfile: Dockerfile
这允许docker-compose在单个命令中管理整个构建和映像编排。
# Rebuild all images
docker-compose build
# Run system
docker-compose up
您可能需要更改图像标记,以便用斜杠分隔两个部分/.而不是
chat-server:staging
做类似的事情:
victor-dombrovsky/chat-server:staging
我认为Docker标签背后有一些逻辑,"一部分"标签被解释为来自DockerHub的官方图像.
从 .env 文件的外观来看,您似乎已配置docker-compose为使用远程 docker 主机:
DOCKER_HOST=tcp://***.***.**.**:2376
此外,此 .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
显然,远程 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
请注意,对于大图像,这可能需要一段时间,尤其是在连接速度较慢的情况下。
| 归档时间: | 
 | 
| 查看次数: | 43186 次 | 
| 最近记录: |