首页 文章

无法从不同的主机部署docker容器

提问于
浏览
0

我'm integrating Docker into the Continous Integration of a project, so with each commit, it builds a docker image, pushes it to a private registry and runs that container on a machine running in OpenStack. We'使用Ansible(v2.1)进行自动化,因此要与Docker交互,我正在使用 docker_container 模块 . 除了运行docker容器之外,我还需要注入一些配置文件,这些配置文件会根据我正在部署的环境而有所不同 . 我使用 volumes 选项注入配置文件 .

一切似乎都运行正常,我可以多次运行部署,docker容器被正确替换...但是当从不同的主机运行相同的进程时问题就开始了(比如我们的Continous Integration主机,Jenkins CI,或者只是另一个笔记本电脑) . docker镜像构建正确,它被推送到私有注册表,但是当它尝试运行新容器时,它无法删除旧容器并停止 . 我收到以下ansible错误:

fatal: [host-1]: FAILED! => {"changed": false, "failed": true, "msg": "Error removing container xxxx: 500 Server Error: Internal Server Error (\"Driver devicemapper failed to remove root filesystem xxx: remove /var/lib/docker/overlay/yyyy/merged: device or resource busy\")"}

我正在使用以下docker_container任务来运行容器:

- name: Run the application container
  docker_container:
    name: "myProject-{{ environment_env }}-app"
    image: "{{ docker_app_image }}"
    state: started
    pull: yes
    restart: yes
    ports:
    - "80:80"
    - "443:443"
    volumes:
    - "{{ remote_home }}/myProject_{{ environment_env }}/log:{{ log_dir }}"
    - "{{ remote_home }}/myProject_{{ environment_env }}/local_settings.py:/server/cms/local_settings.py:ro"
    - "{{ remote_home }}/myProject_{{ environment_env }}/nginx.conf:/etc/nginx/nginx.conf:ro"
    - "{{ remote_home }}/myProject_{{ environment_env }}/myProject.pem:/etc/certificates/myProject.pem:ro"
    - "{{ remote_home }}/myProject_{{ environment_env }}/myProject_private.pem:/etc/certificates/myProject_private.pem:ro"
    - "{{ remote_home }}/myProject_{{ environment_env }}/myProject_vhost.conf:/etc/nginx/conf.d/myProject_vhost.conf:ro"

我已经尝试将docker驱动程序从devicemapper更改为overlay,但问题仍然存在 . 你以前有没有人遇到过这个问题?是否与文件所有者或运行部署的不同主机上的权限有关,而且docker系统无法管理它?任何帮助,将不胜感激!谢谢 .

1 回答

  • 1

    我自己发布了答案,希望它能帮助我解决与Docker相同问题的人 .

    我跟着this guide,它基本上是在docker systemd单元文件中添加一个参数 . 我在 [service] 部分添加了 MountFlags=private 行 . 似乎该问题与文件系统命名空间有关 . 通过此修复,我可以从我想要的多个主机部署容器,并且有0个错误 .

相关问题