Ansible和docker:本地构建映像被拉出并导致失败

Sve*_*eur 1 unix linux ansible docker

我正在使用Ansible为我的服务器配置使我的网站工作所需的任何东西.目标是安装一个基本系统并为其提供运行应用程序的docker容器(目前它只是一个应用程序).

我面临的问题是我的docker镜像不是在dockerhub或其他东西托管.相反,它是由Ansible任务构建的.但是,当我试图运行构建的图像时,Ansible试图拉它(这是不可能的)然后死掉.

这就是剧本部分的样子:

- name: check or build image
  docker_image:
    path=/srv/svenv.nl-docker
    name='svenv/svenv.nl'
    state=build

- name: start svenv/svenv.nl container
  docker:
    name: svenv.nl
    volumes:
    - /srv/svenv.nl-docker/data/var/lib/mysql/:/var/lib/mysql/
    - /srv/svenv.nl-docker/data/svenv.nl/svenv/media:/svenv.nl/svenv/media
    ports:
    - 80:80
    - 3306:3306
    image: svenv/svenv.nl
Run Code Online (Sandbox Code Playgroud)

当我运行它时,失败表明svenv/svenv.nl从存储库中被拉出,它不存在,所以它崩溃了:

failed: [vps02.svenv.nl] => {"changes": ["{\"status\":\"Pulling repository svenv/svenv.nl\"}\r\n", "{\"errorDetail\":{\"message\":\"Error: image svenv/svenv.nl:latest not found\"},\"error\":\"Error: image svenv/svenv.nl:latest not found\"}\r\n"], "failed": true, "status": ""}
msg: Unrecognized status from pull.

FATAL: all hosts have already failed -- aborting
Run Code Online (Sandbox Code Playgroud)

我的问题是:

我怎么能够

  • 建立一个本地码头
  • 然后将其作为容器启动而不拉动它

lar*_*sks 6

你正在遇到这个错误:

Ansible正在尝试创建一个容器,但创建失败的是:

docker.errors.InvalidVersion: mem_limit has been moved to host_config in API version 1.19
Run Code Online (Sandbox Code Playgroud)

不幸的是,有一个全都except:隐藏了这个错误.结果是,ansible假定图像在本地丢失并尝试拉动它,而不是使用上述消息失败.

您可以通过设置docker_api_version为早于1.19的方法解决此问题:

- name: start svenv/svenv.nl container
  docker:
    name: svenv.nl
    ports:
    - 80:80
    - 3306:3306
    image: svenv/svenv.nl
    docker_api_version: 1.18
Run Code Online (Sandbox Code Playgroud)