Als ich jetzt ansible + docker gestartet habe, bin ich von Anfang an gestolpert, aber ich habe es geschafft, es zu starten

Überblick

Arbeiten Sie gemäß dem Excel-Verfahrenshandbuch! Ich habe auf einer Website gesehen, dass Ansible verwendet werden kann, um die Realität zu ändern, und habe versucht, sie in Kombination mit Docker zu überprüfen. Während der Überprüfung habe ich festgestellt, dass ssh nicht erforderlich ist, wenn ich ** "Docker-Verbindungs-Plugin für Ansible" ** als Verbindungsmethode zum Container verwende. Daher habe ich mir eine Notiz gemacht, bis ich nach dem Ändern eine Verbindung herstellen kann.

Umgebung

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

Die Installation jeder Mitte entfällt, da verschiedene Personen für die Öffentlichkeit zugänglich sind.

Einstellungen, wenn es fehlgeschlagen ist

Containerseite

# 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"]

Bereiten Sie einen Container für die Verbindung mit ansible vor (ich habe ihn erstellt, weil ich zuerst versucht habe, ssh zu verwenden).

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

#NW-Einstellung für feste IP-Zuweisung
networks:
  app_net:
    driver: bridge
    ipam:
     driver: default
     config:
       - subnet: 172.16.238.0/24

Ich habe ** feste IP ** gegeben, weil es für ssh praktisch zu sein scheint.

Container-Start

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

Ansible Seite

[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-"immer" in komponieren:Da dort "Neustart" steht, habe ich dafür gesorgt, dass es nicht normal funktioniert

- name: connection test
  hosts: testGrp
  connection: docker #Festlegen der Verwendung des Verbindungs-Plugins
  tasks:
  - name: ping
    ping:

Ergebnis der Ausführung des Spielbuchs

# 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   

Ich habe sicher versagt. Es bestand die Möglichkeit, dass die Fehlermeldung nicht die Berechtigung des tmp-Ordners hatte, aber es gibt keine unzureichende Berechtigung für Ping und hat sie verlassen.

# 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

Nur für den Fall, dass ich Ping alleine ausgeführt habe, aber da dies erfolgreich war, entschied ich, dass es kein Problem mit dem Container selbst gab.

Erfolgreiche Einstellungen

[testGrp]
#172.16.238.101
#172.16.238.102
srv1
srv2

Wenn ich mir verschiedene Artikel ansehe, die hilfreich sind, stelle ich fest, dass alle Artikel bei Verwendung des Plug-Ins durch "Hostname" angegeben sind (zu diesem Zeitpunkt ist ein halber Tag vergangen). Ändern Sie daher die Zielspezifikationsmethode von "IP" in ** "Containername" **.

Ausführungsergebnis

# 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   

Erfolg!

Zusammenfassung

Auch wenn Sie nicht genau hinschauen, steht dort "Containername" oder "Hostname" einschließlich des offiziellen. Es war ein Fehler infolge der Überprüfung der SSH-Verbindung, vorausgesetzt, die IP wurde vorerst festgelegt und die IP-angegebene Verbindung war möglich. .. ..

Die verbleibenden Herausforderungen

Ich wollte eigentlich alles in einem Container starten, einschließlich Ansible, aber als ich es zu einem Container machte, konnte ich über das entsprechende Plug-In nicht auf andere Container zugreifen, also habe ich es vorerst direkt auf dem Host installiert. Es gab einen Artikel, der besagte, dass Sie DooD verwenden können, aber aus irgendeinem Grund hat der Container es nicht erkannt und Sie konnten den Docker-Befehl nicht verwenden. .. .. Nun, die Hauptleitung ist nicht da, also später.

Referenz

Recommended Posts

Als ich jetzt ansible + docker gestartet habe, bin ich von Anfang an gestolpert, aber ich habe es geschafft, es zu starten
Kennen Sie jetzt die Bequemlichkeit von Docker (-compose) (Informationsliste, auf die ich bei der Verwendung verwiesen habe)
Woran ich dachte, als ich anfing, von Java nach Kotlin zu migrieren
Mit Pg_resetwal kann der PostgreSQL Docker-Container gestartet werden, wenn WAL fehlerhaft ist und nicht gestartet werden kann.
Was ich überprüft habe, als ich Docker Hub in einer Windows 10-Heimumgebung installiert habe, aber nicht gestartet wurde
Vergessen Sie nicht freizugeben, wenn Sie das Objekt von S3 erhalten!
Probleme, denen ich beim Erstellen der Digdag-Umgebung mit Docker verfallen war
Untersuchen Sie den Ersatz von Docker zu Podman.
Sikuli (SikuliX) + Beginnend mit RPA in Ruby (Ich bin oft gestolpert, aber ich konnte es richtig machen)
Als ich zu Docker Hub wechselte, wurde mir der Zugriff auf die Ressource verweigert
Ich war süchtig danach, vom Docker-Container aus keine Verbindung zu AWS-S3 herstellen zu können
Ich habe es geschafft, ein Leerzeichen zu bekommen, als ich den Inhalt von Beans in den Textbereich gebracht habe
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Wenn Eclipse den Server nicht starten kann
Ich habe Docker auf EC2 installiert und gestartet
Docker für Windows: Der MySQL-Container wird bei der Migration von Hyper-v auf WSL2 nicht gestartet