【问题标题】:Starting Docker Daemon Through Ansible通过 Ansible 启动 Docker 守护进程
【发布时间】:2014-11-14 13:21:36
【问题描述】:

我一直在编写 ansible playbook 来启动私有 docker 注册表,但我在让 docker 运行时遇到了问题。我遇到的问题是 docker 守护进程没有正常启动。

我正在尝试在我过去做过的 aws ec2 实例上启动 docker 守护程序。主机操作系统是ubuntu 14.04。

我启动的第一个容器是一个Redis实例,应该是下面play开始的

- name: Run a Redis instance
  sudo: yes
  docker: 
    image: dockerfile/redis
    ports: 6379:6379
    name: redis
    volumes: "{{ host_redis_config_dir }}:{{ container_redis_config_dir }}"
    state: running
    command: "redis-server {{ container_redis_config_dir}}/{{ host_redis_config }}"

每次都失败并出现以下错误

失败:[ec2-54-68-242-100.us-west-2.compute.amazonaws.com] => {“更改”:假,“失败”:真} msg: ConnectionError(MaxRetryError("UnixHTTPConnectionPool(host='localhost', port=None): 最大重试次数超出 url: /run/docker.sock/v1.12/containers/json?all=1&limit=-1&trunc_cmd=1&size= 0(由:[Errno 111] 连接被拒绝)“,),)

致命:所有主机都已失败 -- 正在中止

我试过放

service docker start

shell: sudo docker -d &

在播放之前强制守护程序启动(在不同的时间和单独的 ec2 上分别尝试),既不给出错误,也不会停止前面提到的错误。

我可以通过 ssh 进入 ec2 并使用

手动启动守护进程
sudo docker -d &

然后手动启动 Redis 实例,但目标是使用 ansible playbook 自动执行此过程,以防我们需要构建额外的 docker 注册表。

有没有人建议我如何使用 ansible 来确保守护程序正在启动?

【问题讨论】:

    标签: ubuntu amazon-web-services daemon docker ansible


    【解决方案1】:

    在 14.04 中,服务名称是 docker.io

    我可以通过手动停止 docker.io 服务并成功重新启动它来精确地重现您的问题,作为游戏的一部分。

    service: name=docker.io state=started
    

    【讨论】:

    • 是的,我也会在 Ansible 中尝试“服务”命令。您可以尝试暂停 N 秒以允许 Docker 服务运行。 - name: Pause to allow Docker service startspause: seconds=3