Quand j'ai commencé ansible + docker maintenant, j'ai trébuché depuis le début, mais j'ai réussi à le démarrer

Aperçu

Opérez selon le manuel de procédure Excel! J'ai vu sur certains sites que ansible pouvait être utilisé pour changer la réalité, j'ai donc essayé de le vérifier en combinaison avec docker. Et j'ai appris lors de la vérification que ssh n'est pas nécessaire si j'utilise ** "Plugin de connexion Docker pour Ansible" ** comme méthode de connexion au conteneur, j'ai donc fait une note jusqu'à ce que je puisse me connecter après l'avoir changé.

environnement

os: centos7 ansible: 2.9.13 docker: 19.03.13 docker-compose: 1.26.2

L'installation de chaque milieu est omise car plusieurs personnes sont ouvertes au public.

Paramètres en cas d'échec

Côté conteneur

# OS
FROM centos:centos7

# pkg install
RUN yum install -y epel-release && \
    yum update -y  && \
    yum install -y openssh-server openssh-clients sshpass && \
    yum install -y net-tools vim

ENV LANG ja_JP.UTF-8

# root password
RUN echo password | passwd --stdin root

# # sshd_config edit
RUN sed -ri "s/#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config
RUN systemctl enable sshd.service

CMD ["/sbin/init"]

Préparez un conteneur pour la connexion avec ansible (je l'ai fait parce que j'essayais d'utiliser ssh au début)

version: '3.7'

services:
  srv1:
    build:
     context: .
     dockerfile: srv-dockerfile
    hostname: srv1
    container_name: srv1
    environment:
      - TZ=Asia/Tokyo
    restart: always
    tty: true
    networks:
      app_net:
        ipv4_address: 172.16.238.101

  srv2:
    build:
     context: .
     dockerfile: srv-dockerfile
    hostname: srv2
    container_name: srv2
    environment:
      - TZ=Asia/Tokyo
    restart: always
    tty: true
    networks:
      app_net:
        ipv4_address: 172.16.238.102

#Réglage NW pour l'attribution IP fixe
networks:
  app_net:
    driver: bridge
    ipam:
     driver: default
     config:
       - subnet: 172.16.238.0/24

J'ai donné ** IP fixe ** parce que cela semble pratique pour ssh.

Démarrage du conteneur

# docker-compose up -d
Starting srv1 ... done
Starting srv2 ... done

côté ansible

[testGrp]
172.16.238.101
172.16.238.102
- name: start up a docker container
  hosts: localhost
  tasks:
    - name: start up a docker container by running bash
      command: docker-compose -f /srv/ansible/docker-compose.yml up -d
  tags:
    - never # docker-"toujours" dans la composition:Puisqu'il dit "redémarrer", je l'ai fait ne pas fonctionner normalement

- name: connection test
  hosts: testGrp
  connection: docker #Spécifier l'utilisation du plugin de connexion
  tasks:
  - name: ping
    ping:

résultat de l'exécution du playbook

# ansible-playbook -i hosts test-ansible.yml --check --diff

PLAY [start up a docker container] ***********************************************************************************************************************************

PLAY [connection test] ***********************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************
fatal: [172.16.238.101]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo ~/.ansible/tmp `\"&& mkdir \"` echo ~/.ansible/tmp/ansible-tmp-1602479114.98-3164-90901945313893 `\" && echo ansible-tmp-1602479114.98-3164-90901945313893=\"` echo ~/.ansible/tmp/ansible-tmp-1602479114.98-3164-90901945313893 `\" ), exited with result 1", "unreachable": true}
fatal: [172.16.238.102]: UNREACHABLE! => {"changed": false, "msg": "Failed to create temporary directory.In some cases, you may have been able to authenticate and did not have permissions on the target directory. Consider changing the remote tmp path in ansible.cfg to a path rooted in \"/tmp\", for more error information use -vvv. Failed command was: ( umask 77 && mkdir -p \"` echo ~/.ansible/tmp `\"&& mkdir \"` echo ~/.ansible/tmp/ansible-tmp-1602479115.05-3165-268763785818242 `\" && echo ansible-tmp-1602479115.05-3165-268763785818242=\"` echo ~/.ansible/tmp/ansible-tmp-1602479115.05-3165-268763785818242 `\" ), exited with result 1", "unreachable": true}

PLAY RECAP ***********************************************************************************************************************************************************
172.16.238.101             : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0   
172.16.238.102             : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0   

J'ai échoué en toute sécurité. Il était possible que le message d'erreur n'ait pas l'autorité du dossier tmp, mais il n'y a pas d'autorité insuffisante avec ping, et je l'ai laissé.

# docker-compose ps
Name    Command     State   Ports
---------------------------------
srv1   /sbin/init   Up           
srv2   /sbin/init   Up
# docker inspect srv1 | grep IPv4Address
                        "IPv4Address": "172.16.238.101"
# ping 172.16.238.101
PING 172.16.238.101 (172.16.238.101) 56(84) bytes of data.
64 bytes from 172.16.238.101: icmp_seq=1 ttl=64 time=0.133 ms
64 bytes from 172.16.238.101: icmp_seq=2 ttl=64 time=0.134 ms

Juste au cas où, j'ai exécuté le ping seul, mais comme cela a réussi, j'ai décidé qu'il n'y avait aucun problème avec le conteneur lui-même.

Paramètres réussis

[testGrp]
#172.16.238.101
#172.16.238.102
srv1
srv2

Lorsque je regarde divers articles utiles, je remarque que tous les articles sont spécifiés par "nom d'hôte" lors de l'utilisation du plug-in (une demi-journée s'est écoulée à ce stade). Donc, changez la méthode de spécification cible de "IP" à ** "Nom du conteneur" **.

Résultat d'exécution

# ansible-playbook -i hosts test-ansible.yml --check --diff

PLAY [start up a docker container] ***********************************************************************************************************************************

PLAY [connection test] ***********************************************************************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************************************************************
ok: [srv2]
ok: [srv1]

TASK [ping] **********************************************************************************************************************************************************
ok: [srv2]
ok: [srv1]

PLAY RECAP ***********************************************************************************************************************************************************
srv1                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
srv2                       : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Succès!

Sommaire

Même si vous ne regardez pas de près, il indique "nom du conteneur" ou "nom d'hôte", y compris le nom officiel. À partir de la vérification de la connexion ssh, il s'agissait d'un échec en raison de l'hypothèse que l'adresse IP était fixée pour le moment et que la connexion IP spécifiée pouvait être établie. .. ..

Les défis restants

Je voulais vraiment tout démarrer dans un conteneur, y compris ansible, mais lorsque je l'ai transformé en conteneur, je ne pouvais pas accéder à d'autres conteneurs via le plug-in correspondant, donc je l'ai installé directement sur l'hôte pour le moment. Il y avait un article disant que vous pouvez utiliser DooD, mais pour une raison quelconque, le conteneur ne l'a pas reconnu et vous ne pouviez pas utiliser la commande docker. .. .. Eh bien, le principal n'est pas là, donc plus tard.

référence

Recommended Posts

Quand j'ai commencé ansible + docker maintenant, j'ai trébuché depuis le début, mais j'ai réussi à le démarrer
Connaître la commodité de Docker (-compose) maintenant (liste d'informations auxquelles j'ai fait référence lors de son utilisation)
Ce à quoi j'ai pensé lorsque j'ai commencé à migrer de Java vers Kotlin
Pg_resetwal peut être utilisé pour démarrer le conteneur Docker PostgreSQL lorsque WAL est cassé et ne peut pas être démarré.
Ce que j'ai vérifié lorsque j'ai installé Docker Hub dans un environnement domestique Windows 10 mais qu'il n'a pas démarré
N'oubliez pas de relâcher lorsque vous récupérez l'objet de S3!
Problèmes auxquels j'étais accro lors de la création de l'environnement digdag avec docker
Examinez le remplacement de Docker vers Podman.
Sikuli (SikuliX) + Commençant par RPA en Ruby (j'ai trébuché plusieurs fois, mais j'ai pu le faire correctement)
Lorsque j'ai poussé vers Docker Hub, l'accès à la ressource m'a été refusé
J'étais accro à ne pas pouvoir me connecter à AWS-S3 à partir du conteneur Docker
J'ai réussi à obtenir un blanc lorsque j'ai apporté le contenu de Beans dans la zone de texte
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
Lorsque Eclipse ne parvient pas à démarrer le serveur
J'ai installé Docker sur EC2 et l'ai démarré
Docker pour Windows: le conteneur MySQL ne démarre pas lors de la migration d'Hyper-v vers WSL2