【问题标题】:Docker compose and ansible: site.yml does not appear to be a fileDocker compose 和 ansible:site.yml 似乎不是文件
【发布时间】:2016-09-13 04:14:48
【问题描述】:

我正在构建一个 docker-compose 服务,它会在开始对我的应用程序进行测试之前探测我的 db 服务是否启动。 docker-compose 文件运行良好,我刚刚使用 docker 机器创建了一个新主机,现在运行时出现错误:

docker-compose up agent

这是我的 docker-compose.yml

test:
  build: ../../
  dockerfile: docker/dev/Dockerfile
  volumes_from:
    - cache
  links:
    - db
  environment:
    DJANGO_SETTINGS_MODULE: todobackend.settings.test
    MYSQL_HOST: db
    MYSQL_USER: root
    MYSQL_PASSWORD: password
    TEST_OUTPUT_DIR: /reports

builder:
  build: ../../
  dockerfile: docker/dev/Dockerfile
  volumes:
    - ../../target:/wheelhouse
  volumes_from:
    - cache
  entrypoint: "entrypoint.sh"
  command: ["pip", "wheel", "--no-index", "-f /build", "."] 

agent:
  image: pjestrada/ansible
  volumes:
    - ../../ansible/probe.yml:/ansible/site.yml
  links:
    - db
  environment:
    PROBE_HOST: "db"
    PROBE_PORT: "3306"

db:
  image: mysql:5.6
  hostname: db
  expose:
    - "3306"
  environment:
    MYSQL_ROOT_PASSWORD: password

cache:
    build: ../../
    dockerfile: docker/dev/Dockerfile
    volumes:
      - /tmp/cache:/cache
      - /build
    entrypoint: "true"

我的剧本:

---
- name: Probe Host
  hosts: localhost
  connection: local
  gather_facts: no
  tasks:
  - name: Set facts
    set_fact:
      probe_host: "{{ lookup('env', 'PROBE_HOST') }}"
      probe_port: "{{ lookup('env', 'PROBE_PORT') }}"
      probe_delay: "{{ lookup('env', 'PROBE_DELAY') | default(0, true) }}"
      probe_timeout: "{{ lookup('env', 'PROBE_TIMEOUT') | default (180, true) }}"
  - name: Message
    debug:
      msg: >
        Probing {{ probe_host }}:{{ probe_port }} with delay={{ probe_delay }}s
        and timeout={{ probe_timeout }}s 
  - name: Waiting for hosts to respond...
    local_action: >
      wait_for host={{ probe_host }}
      port={{ probe_port }}
      delay={{ probe_delay }}
      timeout={{ probe_timeout }}

还有我的 ansible Dockerfile:

FROM ubuntu:trusty
MAINTAINER Pablo Estrada <pjestradac@gmail.com>

# Prevent dpkg errors
ENV TERM=x-term-256color


RUN sed -i "s/http:\/\/archive./http:\/\/nz.archive./g" /etc/apt/sources.list


#Install ansible

RUN apt-get update -qy && \
    apt-get install -qy software-properties-common && \
    apt-add-repository -y ppa:ansible/ansible && \
    apt-get update -qy && \
    apt-get install -qy ansible

# Add voulme for Ansible Playbooks
Volume /ansible
WORKDIR /ansible




#Entrypoint
ENTRYPOINT ["ansible-playbook"]
CMD ["site.yml"]

我得到的错误是:错误!剧本:site.yml 似乎不是文件

如果我在我的 docker compose 文件上将 probe.yml 映射到 site.yml,我不明白为什么会发生这种情况。我的图有什么问题吗??感谢您的帮助。

更新

显然,当我启动我的 docker 机器并使用时,问题就会发生

eval $(docker-machine env)

这是我的码头机器信息:

default   *        virtualbox   Running   tcp://192.168.99.100:2376           v1.12.1  

当一切正常时,我没有使用 docker-machine 安装任何 docker 主机。这里会发生什么?

【问题讨论】:

    标签: docker ansible


    【解决方案1】:

    很可能您已经指定了 VM 上不存在的 probe.yml 的路径,并且 docker(很有帮助)创建了一个目录并为您安装了该目录。

    ○ →ls -l
    total 8
    -rw-r--r--  1 user  staff  110 13 Sep 05:26 docker-compose.yml
    
    ○ →docker-compose run agent ansible-playbook site.yml
    ERROR! the playbook: site.yml does not appear to be a file
    
    ○ →ls -l
    total 8
    -rw-r--r--  1 user  staff  110 13 Sep 05:26 docker-compose.yml
    drwxr-xr-x  2 user  staff   68 13 Sep 05:31 site.yml
    

    您在本地使用的目录可能未共享给 VM?尽管如果是这种情况,您应该拥有的不仅仅是 agent 失败。

    从 linux 共享到本地虚拟机

    引用the git repo

    如果还不清楚,这里的 Linux 主机支持目前很模糊。

    听起来像共享/homeshared folder 称为/Users 将允许您的主目录自动安装在本地Docker VM 中。如果您创建一个名为 /Users 的指向 /home 的链接并从那里运行您的 docker 命令,这将使目录路径在 VM 和本地计算机中看起来相同,并且 Docker 应该很高兴。

    ln -s /home /Users
    VBoxManage sharefolder add "default" --name "/Users" --hostpath "/Users"
    cd /Users/you/project
    eval $(docker-machine env default)
    docker-compose run whatever
    

    【讨论】:

    • 我很可能没有共享文件夹。如何指定要共享到我的 docker-machine 的文件夹?
    • Docker Toolbox (boot2docker) 默认将/UsersC:/Users 目录作为/Users/c/Users 共享到虚拟机中。除此之外,您必须手动设置:stackoverflow.com/a/33245360
    • 从内存中很难在 boot2docker 中保存自定义共享
    • 在 Linux 上最好的方法是什么?我正在使用 ubuntu
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多