#docker #ansible #systemctl #molecule
#docker #ansible #systemctl #молекула
Вопрос:
У меня работает ansible playbook, однако, пытаясь протестировать его с помощью molecule, я не могу запустить службу докеров.
Вот что у меня есть в molecule.yml
platforms:
- name: instance
image: oraclelinux:7
command: /usr/sbin/init
tmpfs:
- /run
- /run/lock
- /tmp
capabilities:
- SYS_ADMIN
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
port_bindings:
2424: 2424,
2480: 2480
pre_build_image: true
Когда я запускаю свой ansible playbook, я использую приведенную ниже команду для создания контейнера docker:
docker run -it --name=testing -d --rm --privileged --cap-add=SYS_ADMIN --tmpfs /run --tmpfs /run/lock --tmpfs /tmp -p 2424:2424 -p 2480:2480 -v /sys/fs/cgroup:/sys/fs/cgroup:ro oraclelinux:7 /usr/sbin/init
Ошибка при тестировании с помощью molecule:
TASK [docker-role : Start docker] ******************************************
fatal: [instance]: FAILED! => {"changed": true, "cmd": "sudo systemctl start docker",
"delta": "0:00:00.613116", "end": "2020-10-21 03:24:47.268335", "msg": "non-zero return code",
"rc": 1, "start": "2020-10-21 03:24:46.655219", "stderr": "Job for docker.service failed because
the control process exited with error code. See "systemctl status docker.service" and
"journalctl -xe" for details.", "stderr_lines": ["Job for docker.service failed because the
control process exited with error code. See "systemctl status docker.service" and "journalctl
-xe" for details."], "stdout": "", "stdout_lines": []}
Как мне выяснить, в чем проблема с тестом молекулы?
Обновить:
[root@instance /]# systemctl status docker.service
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Wed 2020-10-21 07:05:55 UTC; 2min 22s ago
Docs: https://docs.docker.com
Process: 17373 ExecStart=/usr/bin/dockerd -g /tmp (code=exited, status=1/FAILURE)
Main PID: 17373 (code=exited, status=1/FAILURE)
Oct 21 07:05:55 instance systemd[1]: start request repeated too quickly for docker.service
Oct 21 07:05:55 instance systemd[1]: Failed to start Docker Application Container Engine.
Oct 21 07:05:55 instance systemd[1]: Unit docker.service entered failed state.
Oct 21 07:05:55 instance systemd[1]: docker.service failed.
Oct 21 07:06:13 instance systemd[1]: start request repeated too quickly for docker.service
Oct 21 07:06:13 instance systemd[1]: Failed to start Docker Application Container Engine.
Oct 21 07:06:13 instance systemd[1]: docker.service failed.
Oct 21 07:06:34 instance systemd[1]: start request repeated too quickly for docker.service
Oct 21 07:06:34 instance systemd[1]: Failed to start Docker Application Container Engine.
Oct 21 07:06:34 instance systemd[1]: docker.service failed.
[root@instance /]# docker info
Client:
Debug Mode: false
Server:
ERROR: Cannot connect to the Docker daemon at
unix:///var/run/docker.sock. Is the docker daemon running?
# journalctl -xe
--
-- Unit docker.socket has finished shutting down.
Oct 21 07:09:13 instance systemd[1]: Stopping Docker Socket for the API.
-- Subject: Unit docker.socket has begun shutting down
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.socket has begun shutting down.
Oct 21 07:09:13 instance systemd[1]: Starting Docker Socket for the API.
-- Subject: Unit docker.socket has begun start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.socket has begun starting up.
Oct 21 07:09:13 instance systemd[1]: Listening on Docker Socket for the API.
-- Subject: Unit docker.socket has finished start-up
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.socket has finished starting up.
--
-- The start-up result is done.
Oct 21 07:09:13 instance systemd[1]: start request repeated too quickly for docker.service
Oct 21 07:09:13 instance systemd[1]: Failed to start Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.service has failed.
Насколько я понимаю, ее необходимо было запустить в контейнере docker, где был установлен docker, и необходимо запустить его службу.
Комментарии:
1. В сообщении об ошибке уже указано, что делать. Проверьте
systemctl status docker.service
иjournalctl -xe
получите подробную информацию. Если вы не можете разобраться в проблеме, обновите свой пост и включите эту информацию, чтобы мы могли вам помочь.2. Извините за 101 вопрос здесь, но я не вижу контейнер при запуске: docker container ls -a. Так что я не уверен, как мне выполнить эти команды?
3. Вам не нужен докер или какой-либо контейнер. Это
systemd
говорит о том, что она не смогла запуститьсяdocker.service
. Просто запустите их в командной строке.4. тест molecule уничтожает созданные экземпляры, повторно запускает molecule converge и обновляет вывод вышеуказанных команд
Ответ №1:
Может быть, я не очень хорошо понимаю вопрос, но с molecule вам не нужно запускать контейнер, molecule сделает это за вас.
Вы можете попробовать это:
molecule create # This would create the instance
molecule list # This would show you the molecule scenario status
molecule converge # This would run you molecule playbook that would run the role
На самом деле molecule test
команда выполнит все эти шаги:
--> Test matrix
└── default
├── lint
├── destroy
├── dependency
├── syntax
├── create
├── prepare
├── converge
├── idempotence
├── side_effect
├── verify
└── destroy
Чтобы контейнер был доступен с примененной ролью, вам необходимо выполнить converge
command .
После конвергенции вы также можете попасть в контейнер через molecule:
molecule login --host instance