我知道不建议在Docker容器上使用Systemd,但是有可能吗?
我在使用Ansible部署的Ubuntu 18.04云虚拟机上具有暂存/产品环境;
我当前的开发环境是Ubuntu 18.04 Vagrantfile
,它使用相同的分期/生产的Ansible playbook.yml
现在,我尝试用Vagrantfile
替换Dockerfile
进行开发,但是在应用系统模块时Ansible playbook.yml
失败。我也希望在我的开发环境中也有systemd
,以便可以在本地playbook.yml
上测试更改。知道我该怎么做吗?
如果我尝试使用Dockerfile
和playbook.yml
进行如下构建,则会收到错误Failed to find required executable systemctl in paths
。
如果我将RUN apt-get install systemd
添加到Dockerfile
并尝试构建,则会收到错误System has not been booted with systemd as init system
样本Dockerfile
:
FROM ubuntu:18.04
ADD . /app
WORKDIR /app
# Install Python3 pip used to install Ansible
RUN apt-get update && apt-get install -y \
python3-pip \
# Install Ansible
RUN pip3 install --trusted-host pypi.python.org ansible
RUN ansible-playbook playbook.yml -i inventory
EXPOSE 80
样本
playbook.yml
:---
- name: Ansible playbook to setup dev environment
hosts: all
vars:
ansible_python_interpreter: "/usr/bin/python3"
debug: True
become: yes
become_method: sudo
tasks:
- name: Copy App Gunicorn systemd config
template:
src: app_gunicorn.service
dest: /etc/systemd/system/
- name: Enable App Gunicorn on systemd
systemd: state=started name=app_gunicorn
样本
inventory
:docker-dev ansible_host=localhost ansible_connection=local
最佳答案
这是应使用docker-systemctl-replacement脚本的完美示例。
它被开发为允许ansible脚本同时针对虚拟机和docker容器。您不需要启用真实的systemd,只需在否则受systemd控制的操作系统中覆盖/ usr / bin / systemctl。然后,docker容器将对ansible足够好看,而我更习惯于使用常规的“service:”模块,而不是特定的“systemd:”模块。