Docker-Dateispeicherpfad, Port-Mapping-Betriebsmodus ändern

Docker-Dateispeicherpfad, Port-Mapping-Betriebsmodus ändern

So erhalten Sie den Container-Startbefehl

Der Container wurde bereits erstellt. So erfahren Sie seine Startparameter (wo die Daten gemountet sind)

#Angenommen, ein Container wird mit dem folgenden Befehl gestartet: docker run -d --name mysql_cdh \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mysql-daten:/var/lib/mysql \
--restart=immer \
mysql:5.5 --character-set-server=utf8
#So erhalten Sie die Startparameter über den Containernamen [root@jenkins ~]# docker inspect mysql_cdh
[
 {
  "ID": "3aad772538b5e86705d3358362517a08d53f951aa6522e2881321135f05c8872",
  "Erstellt": "2019-09-25T01:43:37.720505875Z",
  "Pfad": "docker-entrypoint.sh",
  "Argumente": [
   „--character-set-server=utf8“
  ],
  ...
  "Name": "/mysql_cdh",
  
	 	"HostKonfiguration": {
	   "Bindet": [
	    „mysql-daten:/var/lib/mysql“
	   ],
	   ...
	   "Netzwerkmodus": "Standard",
	   "PortBindings": {
	    "3306/tcp": [
	     {
	      "HostIp": "",
	      "HostPort": "3306"
	     }
	    ]
	   },
	   "Neustartrichtlinie": {
	    "Name": "immer",
	    "MaximumRetryCount": 0
	   },
	
 	"Reittiere": [
	   {
	    "Typ": "Volumen",
	    "Name": "mysql-daten",
	    "Quelle": "/var/lib/docker/volumes/mysql-data/_data",
	    "Ziel": "/var/lib/mysql",
	    "Treiber": "lokal",
	    "Modus": "z",
	    "RW": wahr,
	    "Ausbreitung": ""
	   }
	  ],
	
		"Konfiguration": {
	   "Hostname": "3aad772538b5",
	    ...
	   "Offengelegte Ports": {
	    "3306/tcp": {}
	   },
				...
	   "Umgebung": [
	    "MYSQL_ROOT_PASSWORD=123456",
	    „PFAD=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/mysql/bin:/usr/local/mysql/scripts“,
	    "GOSU_VERSION=1.7",
	    "MYSQL_MAJOR=5.5",
	    "MYSQL_VERSION=5.5.62"
	   ],
	   "Befehl": [
	    „--character-set-server=utf8“
	   ],

1. Containerebene: Dateispeicherpfad

#1, Starten Sie den Container [root@master ~]# docker run -d --name nginx2 nginx
a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8
#2, Holen Sie sich die Container-ID
[root@master ~]# docker inspect nginx2 | grep -i id 
[root@master ~]# docker inspect nginx2 | grep -i id 
  "ID": "a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8",
   "Pid": 2069,
  "ExecIDs": null,
   "ContainerIDFile": "",
			
#Temporäre Containerdateien anzeigen – bei jeder Erstellung zufällig generierte Dateien (Containerebene)
# /var/lib/docker/containers/Container-ID
[root@master ~]# docker inspect nginx2 | grep -i Pfad
 "Pfad": "nginx",
 "ResolvConfPath": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/resolv.conf",
 "HostnamePfad": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/hostname",
 "HostsPath": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/hosts",
 "LogPath": "/var/lib/docker/containers/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8/a9c9f31cdccf13c3385f3de33443325d2e14d69458e6d679e54c8cf9e5ff24c8-json.log",

Containerhafen übermorgen ändern

a. Senden Sie zuerst den alten Container als neues Image und starten Sie dann den neuen Container

Sie müssen Folgendes sicherstellen: Die Datenvolumenzuordnung ist vollständig konsistent (die neuen und alten Container müssen auf dem Datenvolumen konsistent sein).

[root1@c7-docker ~]# docker inspect mysql_port |egrep -i 'volum|Mount' -A 2
   "Volumen": {
    "/var/lib/mysql": {}
   },
--
   "Volumen": {
    "/var/lib/mysql": {}
   },

Speichern Sie den Container als Image, starten Sie dann einen neuen Container und fügen Sie die Portzuordnung hinzu

################# 1. Starten Sie einen Container############### 
[root1@c7-docker ~]# docker run --name t1 -d -e MYSQL_ROOT_PASSWORD=123456 -v mysql-test-dir:/var/lib/mysql/ -p 3308:3306 mysql:5.5
53f2a3c53d4c6769897ee484c3d2ff4e3f82ea1e390d4950b2162c08af05d7cc
[root1@c7-docker ~]# Docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
53f2a3c53d4c mysql:5.5 "docker-entrypoint.s..." vor 3 Sekunden Aktiv 3 Sekunden 0.0.0.0:3308->3306/tcp t1
[root1@c7-docker ~]# mysql -uroot -p123456 -P3308 --protocol tcp
Willkommen beim MariaDB-Monitor. Befehle enden mit ; ​​oder \g.
Ihre MySQL-Verbindungs-ID ist 1
Serverversion: 5.5.62 MySQL Community Server (GPL)
MySQL [(keine)]> Datenbanken anzeigen;
+--------------------+
| Datenbank |
+--------------------+
| Informationsschema |
|mysql |
| Leistungsschema |
+--------------------+
3 Zeilen im Satz (0,00 Sek.)
MySQL [(keine)]> Datenbanktest erstellen;
Abfrage OK, 1 Zeile betroffen (0,00 Sek.)
MySQL [(keine)]> Test verwenden;
Datenbank geändert
MySQL [Test]> Tabelle t1 erstellen (ID int);
Abfrage OK, 0 Zeilen betroffen (0,00 Sek.)
MySQL [test]> in t1 Werte einfügen(1),(2),(3);
Abfrage OK, 3 Zeilen betroffen (0,00 Sek.)
Datensätze: 3 Duplikate: 0 Warnungen: 0
MySQL [Test]> wähle * aus t1;
+------+
|Ich würde|
+------+
| 1 |
| 2 |
| 3 |
+------+
3 Zeilen im Satz (0,00 Sek.)
 
################ 2. Aktuelle Containerumgebung übermitteln – als neues Image speichern############### 
[root1@c7-docker ~]# docker commit -m mysql_test_chag-port_img t1 mysql_port
sha256:9f90be3c200c6a8b535478375c4caf86d589d231afae1293d28026f9248f8ae3
[root1@c7-docker ~]# Docker-Bilder
REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
mysql_port latest 9f90be3c200c vor 3 Sekunden 205 MB
mysql 5.5 d404d78aa797 vor 18 Monaten 205 MB
################ 3. Stoppen Sie den alten Container und starten Sie den neuen Container################ 
[root1@c7-docker ~]# Docker stoppt t1
t1
[root1@c7-docker ~]# docker run --name t2 -d -v mysql-test-dir:/var/lib/mysql/ -p 3309:3306 mysql_port
fd7cefe55db8bb2687ab044ff1473f0c935ac5ce867df81b3b13f570e9026868
[root1@c7-docker ~]# Docker ps
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
fd7cefe55db8 mysql_port "docker-entrypoint.s..." vor 3 Sekunden Aktiv seit 2 Sekunden 0.0.0.0:3309->3306/tcp t2
[root1@c7-docker ~]# mysql -uroot -p123456 -P3309 --protocol tcp
Willkommen beim MariaDB-Monitor. Befehle enden mit ; ​​oder \g.
Ihre MySQL-Verbindungs-ID ist 2
Serverversion: 5.5.62 MySQL Community Server (GPL)
MySQL [(keine)]> Datenbanken anzeigen;
MySQL [(keine)]> Test verwenden;
Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen
Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten
Datenbank geändert
MySQL [Test]> wähle * aus t1;
+------+
|Ich würde|
+------+
| 1 |
| 2 |
| 3 |
+------+
3 Zeilen im Satz (0,00 Sek.)

b. Ändern Sie die Containerkonfigurationsdatei: hostconfig.json

Sie müssen zuerst den Docker-Dienst stoppen, sonst wird er nicht wirksam

Suchen Sie die Konfigurationsdatei hostconfig.json über die Container-Layer-Datei und ändern Sie den vom Container zugeordneten Port

[root@docker a9c9f31cd...ff24c8]# pwd
/var/lib/docker/containers/d93185e3a0....2e544ccfa
[root@docker a9c9f31cd...ff24c8]# cat hostconfig.json 
{"Bindet":["/dockersuperset:/home/superset"],"ContainerIDFile":"",
"LogConfig":{"Typ":"json-Datei","Konfiguration":{}},"Netzwerkmodus":"Standard",
"PortBindings":{"8088/tcp":[{"HostIp":"","HostPort":"8099"}]}......

2. Bildebene: Dateispeicherpfad

[root@master ~]# Docker-Image inspizieren nginx | ​​​​tail -n 22
  "GraphTreiber": {
   "Daten": {
    "LowerDir": "/var/lib/docker/overlay2/bf20cf788cc053f00ff1467525d50e19bd1cf07a2167f72511bdfcb28918a472/diff:/var/lib/docker/overlay2/317d80bb7ae58ed288be9ebd84aeb5b4b3a1c06f3211f5d1f32d89b629d1876e/diff",
    "MergedDir": "/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/zusammengeführt",
    "UpperDir": "/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/diff",
    "Arbeitsverzeichnis": "/var/lib/docker/overlay2/7782d0eb292fdc8bbd73bf9bae2d65468e8aba0bcd6baed55ac348618b80ae16/work"
   },
   "Name": "overlay2"
  },

a, Containerebene, Bildebene: Zuordnung

I, Untercontainer: Kopiere die Bilddatei

II, Untercontainer: Neue Dateien hinzufügen

III. Untercontainer: Aus dem Image kopierte Dateien ändern

b. Ändern Sie in der Image-Ebene (Dateispeicherverzeichnis) die Konfigurationsdatei

# Rufen Sie das Dateispeicherverzeichnis des Spiegelcontainers auf und ändern Sie die Konfigurationsdatei [root@master d37ff828e6308...0c0599b]# ls diff/run/
nginx.pid
[root@master d37ff828e6308...0c0599b]# ls diff /var/cache/nginx/
client_temp fastcgi_temp proxy_temp scgi_temp uwsgi_temp
[root@master d37ff828e6308...0c0599b]# ls zusammengeführt/
bin/ dev/ etc/ lib/ media/ opt/ root/ sbin/ sys/ usr/  
boot/ .dockerenv home/ lib64/ mnt/ proc/ run/ srv/ tmp/ var/  
[root@master d37ff828e6308...0c0599b]# ls zusammengeführt/etc/nginx/
conf.d fastcgi_params koi-utf koi-win mime.types module nginx.conf scgi_params uwsgi_params win-utf
[root@master d37ff828e6308...0c0599b]# head merged/etc/nginx/nginx.conf 
Benutzer nginx;
Arbeiterprozesse 1;
#Ändern Sie hier die Konfigurationsdatei, entfernen Sie die Semikolons der beiden Zeilen user nginx; worker_process 1; um zu sehen, ob sich die Konfiguration im Container geändert hat [root@master d37ff828e6308...0c0599b]# head merged/etc/nginx/nginx.conf -n 3
Benutzer nginx
Arbeitsprozesse 1
#Melden Sie sich beim Container an und zeigen Sie die geänderte Konfiguration an: Überprüfen Sie, ob sie wirksam ist [root@master d37ff828e6308...0c0599b]# docker exec -it nginx2 bash
root@a9c9f31cdccf:/# Kopf /etc/nginx/nginx.conf -n 3
Benutzer nginx
Arbeitsprozesse 1

3. Ändern Sie den Standardspeicherpfad

a, erstellen Sie das Verzeichnis /var/lib/docker neu

#Daten auf einem neuen Speicherpfad sichernService Docker Stop
mkdir /docker.bak
mv /var/lib/docker/* /docker.bak
#Erstellen Sie einen Softlink mkdir /home/docker-data
mv /docker.bak/* /home/docker-data/ && rmdir /docker.bak
ln -s /home/docker-data /var/lib/docker

b. Ändern Sie die Konfiguration

vi /usr/lib/systemd/system/docker.service 
ExecStart=/usr/bin/dockerd --graph /neuer-Pfad/docker 
#Konfigurationsdatei neu laden systemctl daemon-reload 
#Docker neu starten 
systemctl Neustart docker.service

Das Obige ist meine persönliche Erfahrung. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Sollten dennoch Fehler oder unvollständige Überlegungen vorliegen, freue ich mich über eine Korrektur.

Das könnte Sie auch interessieren:
  • Docker-Port-Mapping und externe Unzugänglichkeitsprobleme
  • So erreichen Sie Netzwerkzugriff mit Docker-Port-Mapping
  • Docker ermöglicht mehrere Port-Mapping-Befehle
  • Docker-Volumes-Dateizuordnungsmethode
  • Konfiguration der primären Netzwerk-Portzuordnung für Docker
  • So ändern Sie die Portzuordnung eines laufenden Docker-Containers
  • Docker richtet Port-Mapping ein, kann aber nicht auf die Lösung zugreifen

<<:  Beispielcode zur Implementierung eines 3D-Text-Hover-Effekts mit CSS3

>>:  Tutorial zur Verwendung von Webpack in JavaScript

Artikel empfehlen

Detaillierte Einführung in die Mysql-Datumsabfrage

Abfrage des aktuellen Datums AKTUELLES DATUM AUSW...

Detaillierte Erklärung des Unterschieds zwischen run/cmd/entrypoint in Docker

In Dockerfile können run, cmd und entrypoint zum ...

Zusammenfassung der allgemeinen MySQL-Benchmark-Befehle

mysql.lap Allgemeine Parameterbeschreibung –auto-...

Zusammenfassung der Linux-Befehlsmethoden zum Anzeigen verwendeter Befehle

Im System werden viele Befehle verwendet. Wie kön...

So fügen Sie einer Tabelle in SQL Felder und Kommentare hinzu

1. Felder hinzufügen: Tabelle Tabellennamen änder...

Die perfekte Lösung, um das Passwort in mysql8.0.19 zu vergessen

Lesetipp: MySQL 8.0.19 unterstützt Kontosperrfunk...

Detaillierte Analyse von Javascript-Datenproxys und Ereignissen

Inhaltsverzeichnis Datenbroker und Events Überprü...

Über die Position des H1-Tags in XHTML

In letzter Zeit wurde viel über H1 diskutiert (auf...

Detaillierte Einführung in die Linux-Hostnamenkonfiguration

Inhaltsverzeichnis 1. Konfigurieren Sie den Linux...

Design-Referenz: Erfolgsbeispiel für die Erstellung einer WordPress-Website

Jede dieser 16 Sites ist eine sorgfältige Lektüre ...

Erläuterung der MySQL-Leistungsprüfung durch den Befehl „show processlist“

Der Befehl „show processlist“ ist sehr nützlich. ...

Detaillierte Erklärung des Linux-Texteditors Vim

Vim ist ein leistungsstarker Vollbild-Texteditor ...

HTML-Implementierung eines einfachen Rechners mit detaillierten Ideen

Code kopieren Der Code lautet wie folgt: <!DOC...