如何使用Ansible启动Docker容器

时间:2020-04-24 14:48:03

标签: docker docker-compose ansible dockerfile

我正在写一本剧本,我想在其中构建图像并为该图像启动一些容器。我能够构建映像,但是我的容器尚未开始使用。 它们已成功创建,但未处于运行状态。

有人可以帮助我吗?

- name: Manage Docker instances via Ansible
  hosts: shashank-VM
  connection: local
  become: yes
  become_method: sudo
  tasks:
    - name: Building an image from Dockerfile
      docker_image:
        build:
          path: .
          pull: yes
        name: web
        source: build

    - name: Starting Docker Containers
      docker_container:
        name: my-app-{{ item }}
        image: web:latest
        state: started
      with_sequence: count=4

从下面您可以看到容器已创建,但是如果我执行sudo docker ps,我什么也看不到。

TASK [Starting Docker Containers] ************************************************************************************************************
/usr/lib/python2.7/dist-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.25.9) or chardet (3.0.4) doesn't match a supported version!
  RequestsDependencyWarning)
changed: [shashank-VM] => (item=1)
changed: [shashank-VM] => (item=2)
changed: [shashank-VM] => (item=3)
changed: [shashank-VM] => (item=4)
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
shashank@shashank-VM:~/docker_project$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
d5b586266f15        web_new             "/bin/bash"         2 minutes ago       Exited (0) 2 minutes ago                       myvm-app-4
ea45cc1fcf3c        web_new             "/bin/bash"         2 minutes ago       Exited (0) 2 minutes ago                       myvm-app-3
1e685f3d1368        web_new             "/bin/bash"         2 minutes ago       Exited (0) 2 minutes ago                       myvm-app-2
5d03750c3fd2        web_new             "/bin/bash"         2 minutes ago       Exited (0) 2 minutes ago                       myvm-app-1
shashank@shashank-VM:~/docker_project$ sudo docker run -d web_new
6e937d7a8e75c04ea9dc6769fa41b00f5bf455e6f947f002d181d105b94c7265
shashank@shashank-VM:~/docker_project$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
shashank@shashank-VM:~/docker_project$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
6e937d7a8e75        web_new             "/bin/bash"         14 seconds ago      Exited (0) 13 seconds ago                       agitated_bartik

Dockerfile内容-

FROM debian:8.5
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Default page. Nginx is in your container. ' \
>/usr/share/nginx/html/index.html
EXPOSE 8085

1 个答案:

答案 0 :(得分:3)

这与Ansible无关。

您的Docker映像基于debian:8.5,当运行时,该映像只是启动一个shell。如果外壳未连接到终端,它将立即退出。例如,尝试运行:

docker run debian:8.5

如果您希望映像运行持久性服务(例如nginx),则需要安排nginx在从映像启动容器时运行。您可以通过在Dockerfile中使用CMDENTRYPOINT指令来执行此操作。

例如:

FROM debian:8.5
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Default page. Nginx is in your container. ' \
>/usr/share/nginx/html/index.html
EXPOSE 8085
CMD ["nginx", "-g", "daemon off"]