我正在构建一个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。这可以发生什么?
答案 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主机支持目前是模糊的。
听起来像共享/home
,因为shared folder /Users
将允许您的主目录在本地Docker VM中自动挂载。如果您创建一个名为/home
的{{1}}链接并从那里运行docker命令,这将使VM和本地计算机中的目录路径看起来相同,Docker应该感到高兴。
/Users