在使用Docker容器時(shí),經(jīng)常需要將容器內(nèi)的服務(wù)暴露在外部網(wǎng)絡(luò)中,以便外界能夠訪問。Docker提供了多種方式進(jìn)行端口映射,其中最基本的方式是使用“-p”參數(shù)指定端口映射規(guī)則。這種方式可以將容器中的任意端口映射到宿主機(jī)上的任意端口。但是,使用這種方式會(huì)存在一個(gè)問題,就是每次啟動(dòng)容器時(shí)映射到宿主機(jī)上的端口號(hào)是不確定的,可能會(huì)導(dǎo)致其他應(yīng)用程序與該端口發(fā)生沖突。
為了解決這個(gè)問題,Docker提供了一種外部端口固定的方式。具體實(shí)現(xiàn)方法是在“-p”參數(shù)后加上“指定外部端口:容器內(nèi)部端口”的形式,如下所示:
-p 8080:80
上述命令的意思是將容器內(nèi)部的80號(hào)端口映射到宿主機(jī)上的8080號(hào)端口。這種方式可以確定在每次啟動(dòng)容器時(shí)使用的端口號(hào),從而避免和其他應(yīng)用程序產(chǎn)生沖突。
除了上述方法外,Docker還支持將多個(gè)內(nèi)部端口映射到同一個(gè)外部端口的方式。具體實(shí)現(xiàn)方法是在“-p”參數(shù)后加上“指定外部端口:容器內(nèi)部端口/協(xié)議”的形式,如下所示:
-p 8080:80/tcp -p 8080:443/tcp
上述命令的意思是將容器內(nèi)部的80號(hào)端口和443號(hào)端口都映射到宿主機(jī)上的8080號(hào)端口。這種方式適用于容器內(nèi)部需要同時(shí)運(yùn)行多個(gè)服務(wù)的情況。
總的來說,使用外部端口固定的方式可以避免端口號(hào)不確定性帶來的問題。但是需要注意的是,使用這種方式需要確保宿主機(jī)上映射的端口號(hào)未被其他應(yīng)用程序占用。