Docker 19.03.13的四個使用細節

itorly發表於2020-11-20

最先提一句,據說docker若崩潰難以恢復,docker上是否放mysql需要慎重考慮

1.localhost在docker裡意味著什麼?

不是docker所在的伺服器的ip地址

docker裡的tomcat容器上的web專案連線mysql的url中,例如

spring.datasource.url=jdbc:mysql://域名:3306/資料庫名?characterEncoding=UTF-8&serverTimezone=GMT

如果這個mysql和這裡的docker安裝在同一臺伺服器上(當然實際生產環境時MySQL單獨存放的),無論這個mysql安裝docker上還是直接安裝在linux上,

域名不要使用localhost(這相當於一個相對地址),

而要用ip地址(這相當於一個絕對地址),

例如連線docker裡的mysql容器,用localhost會導致連線mysql失敗,tomcat執行日誌報sqlException和communicationException異常:

在這裡插入圖片描述

2.如何登入docker裡的mysql容器?

執行在docker裡的mysql容器,linux上訪問它要加 -h 127.0.0.1, 如:

mysql -h 127.0.0.1 -u root -p

當然要訪問它也可以使用客戶端navicat。

3.關於docker上的mysql容器裡面的庫及其表的存在或清空問題

3.1docker

執行關閉容器命令

docker stop 容器id

,此前建立的庫表依然存在 。

執行刪除容器命令

docker rm 容器id

,此前建立的庫表被清空。

3.2docker-compose

(1)執行關閉或關閉並刪除命令

docker-compose stop|down

之後 ,之前建立的庫表依然存在。

(2)執行構建命令

docker-compose build

或 執行構建並啟動命令

docker-compose up --build

,之前建立的庫表被清空。

4.docker-compose啟動支援類似事務回滾的設定嗎?

在執行命令

docker-compose up -d

之後,有的容器啟動失敗雖然會報錯,但是其餘容器照常啟動並執行,不會發生類似事務回滾的機制。

如果可以設定事務回滾的機制是否更加合理?即同一個docker-compose.yml管理的所有容器,只要啟動失敗的容器,那麼其餘所有容器都不應該照常啟動執行。

相關文章