Docker containers chạy các dịch vụ bên trong nó trên các cổng được chỉ định cụ thể. Để truy cập dịch vụ của một container đang chạy trên một port, bạn cần liên kết container port với port trên Docker host (máy thật).
Ví dụ như hình trên ta có thể thấy 1 vài điểm:
Container APACHE đang chạy port trong là port 80 nó sẽ map với 1 port bên ngoài là port 25980.
Bây giờ, bạn cần truy cập vào website đang chạy Apache container trên port 80
. Chúng ta sẽ liên kết docker port 25980 tới container port 80
. Bạn cũng có thể dùng port 80 trên docker port.
Đễ có được điều trên thì khi chạy docker run cần thêm thông số port vào nguyên tắc thứ tự từ port ngoài vào port trong.
Host port ngoài là 25980, container port trong là port 80.
docker run -it -p 25980:80 apache_image docker run -it -p 25981:80 apache_image docker run -it -p 389:389 ldap_image docker run -it -p 3306:3306 mysql_image docker run -it -p 3307:3306 mysql_immage
Ví dụ 1: Show tất cả các port đang chạy trên container
//Lệnh cần dùng đễ show tất cả các port được map trong container docker ps -a
Ví dụ 2: Trong trường hợp docker có quá nhiều container ta muốn check cụ thể port của 1 vài container cụ thể có thê dùng các cách sau :
- Check port theo Container ID
- Check port theo NAMES (là hostname khi dùng docker run chạy)
Có thể check các thông số sau bằng lệnh ví dụ 1:
//Check theo container ID [root@gitlab ~]# docker port c4f8c77af54e 80/tcp -> 0.0.0.0:3001 80/tcp -> :::3001 //Check theo NAMES container [root@gitlab ~]# docker port c-httpd 443/tcp -> 0.0.0.0:443 443/tcp -> :::443 80/tcp -> 0.0.0.0:9999 80/tcp -> :::9999
Ví dụ 3: Check port đang được public ra ngoài của 1 container
[root@gitlab ~]# docker port c4f8c77af54e 3001/tcp Error: No public port '3001/tcp' published for c4f8c77af54e [root@gitlab ~]# docker port c4f8c77af54e 80/tcp 0.0.0.0:3001 :::3001