Docker compose和ansible:site.yml似乎不是一个文件

时间:2016-09-13 04:14:48

标签: docker ansible

我正在构建一个docker-compose服务,该服务在我的应用程序开始测试之前探测我的数据库服务。 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"]

我得到的错误说:错误! playbook: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主机与docker-machine。这可以发生什么?

1 个答案:

答案 0 :(得分: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共享到本地VM

引用the git repo

  

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

听起来像共享/home,因为shared folder /Users将允许您的主目录在本地Docker VM中自动挂载。如果您创建一个名为/home的{​​{1}}链接并从那里运行docker命令,这将使VM和本地计算机中的目录路径看起来相同,Docker应该感到高兴。

/Users