這是我的 docker-compose.yml 文件
version: '2.x' services: myNginx: image: nginx restart: always myRedis: image: redis restart: always ports: - "6379:6379" mysql: image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: henry6764 # 設置 MySQL root 用戶的密碼 MYSQL_USER: henry # 設置自定義用戶名 MYSQL_PASSWORD: henry6764 # 設置自定義用戶的密碼 ports: - "3307:3306" # 將容器的 MySQL 默認端口映射到宿主機的 3306 端口 volumes: - /home/henry/mysqlFilePath:/var/lib/mysql # 將容器內的 MySQL 數據目錄掛載到宿主機上
在這裏,我將宿主機的 3307 端口 映射到 mysql容器的 3306端口。
下面看下 文心一言 對docker端口映射的解釋:
- 當您映射了宿主機的3307端口到容器的3306端口後,您可以通過宿主機的IP地址和映射的端口來訪問MySQL服務。這是Docker端口映射功能的典型用法,它允許您通過宿主機的某個端口來訪問容器內的服務,即使服務在容器內部監聽的是另一個端口。
- 在這種情況下,您不需要知道容器的IP地址,因爲Docker的端口映射功能會在宿主機上創建一個監聽在特定端口(本例中是3307)的代理,該代理會將流量轉發到容器內的相應端口(本例中是3306)
因此,我在宿主機上面,有2種方式訪問 mysql容器。
1.使用 mysql 容器的Ip 地址 + 3306 端口訪問
2.使用 宿主機的IP地址(比如我這裏的宿主機就是我的centos7系統) + 3307 端口 訪問
有了宿主機這一層的 端口映射之後,外部 直接訪問 宿主機ip + 3307 端口,就可以訪問到 mysql容器了。
至於docker 是如何使用這個端口映射,如何維護這個端口映射,我沒有去深入研究。知道這是Docker端口映射功能的典型用法即可。
docker 端口映射,解決所有不服!