Как включить systemd в Dockerfile с помощью Ubuntu18.04 - PullRequest
0 голосов
/ 20 ноября 2018

Я знаю, что Systemd не рекомендуется для контейнеров Docker, но возможно ли это?

У меня есть промежуточные / промежуточные среды на облачных виртуальных машинах Ubuntu 18.04, развернутые с Ansible;

Моя текущая среда разработки -Ubuntu 18.04 Vagrantfile, которая использует тот же Ansible playbook.yml staging / prod

Теперь я пытаюсь заменить Vagrantfile на Dockerfile для разработки, но Ansible playbook.yml не удается при применениисистемные модули.Я также хотел бы иметь systemd в своей среде разработки, чтобы я мог тестировать изменения в своей playbook.yml локальной сети.Любая идея, как я могу это сделать?

Если я пытаюсь построить с Dockerfile и playbook.yml, как показано ниже, я получаю ошибку Failed to find required executable systemctl in paths.

Если я добавлю RUN apt-get install systemdDockerfile и попытаться построить, я получаю сообщение об ошибке 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

1 Ответ

0 голосов
/ 20 ноября 2018

Это прекрасный пример, где следует использовать сценарий docker-systemctl-replace .

Он был разработан для того, чтобы разрешить использование сценариев ANSI для целевых виртуальных машин и контейнеров Docker.Вам не нужно включать реальный systemd, просто перезаписать / usr / bin / systemctl в операционных системах, которые в противном случае находятся под управлением systemd.Контейнер Docker будет выглядеть достаточно хорошо для ANSI, тогда как я более привык использовать общий модуль 'service:' вместо определенного модуля 'systemd:'.

...