无法从不同的主机部署泊坞窗容器

我将Docker集成到一个项目的连续集成中,所以每次提交时,都会build立一个Docker镜像,将其推送到一个私有的registry中,并在运行在OpenStack上的机器上运行该容器。 我们使用Ansible(v2.1)进行自动化,因此为了与Docker进行交互,我使用了docker_container模块。 除了运行Docker容器之外,我还需要注入一些configuration文件,这些configuration文件根据我部署到的环境而有所不同。 我使用选项来注入configuration文件。

似乎一切正常,我可以多次运行部署,docker容器被正确地replace…但是当相同的进程从不同的主机运行(如我们的连续集成主机,jenkinsCI,或只是另一个主机笔记本电脑)。 Docker镜像是正确构build的,它会被推送到私有registry,但是当它试图运行新的容器时,它将无法删除旧的并暂停。 我收到以下错误信息:

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更改为覆盖,但问题依然如故。 以前有没有人遇到过这个问题? 它是否与文件所有者或运行部署的不同主机上的权限有关,而且docker系统无法pipe理该文件? 任何帮助,将不胜感激! 谢谢。

我自己发布答案,希望它能帮助与Docker遇到同样问题的人。

我遵循这个指南 ,基本上是在docker systemd单元文件中添加一个参数。 我在[service]部分添加了MountFlags=private线。 看来这个问题与文件系统命名空间有关。 有了这个修复,我可以从我想要的任意多个主机部署容器,并且有0个错误。