docker如何在容器里面再創(chuàng)建容器

如何在一個(gè)container里面啟動(dòng)另一個(gè)container?

當(dāng)我們的服務(wù)發(fā)布在一個(gè)container里面時(shí),有些服務(wù)需要再起另一個(gè)服務(wù)提供外部訪問,這時(shí)候需要另外啟動(dòng)一個(gè)container。

其實(shí)只要能拿到docker deamon的endpoint就可以直接發(fā)送REST API請(qǐng)求了。這就是訪問遠(yuǎn)程的方法。

下面的例子步驟,如何在container里面調(diào)用宿主機(jī)上的docker daemon創(chuàng)建新的container。

第一步:
啟動(dòng)第一個(gè)container的時(shí)候,把宿主機(jī)的docker endpoint socket文件,和docker command文件使用volume參數(shù)映射進(jìn)container。

docker run -it \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /lib64/libltdl.so.7:/lib64/libltdl.so.7 \
<imgname> bash

這個(gè)命令添加了三個(gè)volumne

  1. /var/run/docker.sock host的docker endpoint
  2. /usr/bin/docker docker可執(zhí)行命令
  3. /lib64/libltdl.so.7 docker可執(zhí)行命令的依賴庫。

第二步:
至此我們就可以在container里面運(yùn)行docker命令了。

$ docker images
$ docker ps
$ docker run -it <imagename> bash
...

第三步:
注意如果我們要在container里面運(yùn)行一個(gè)container,而需要加載volume時(shí),這個(gè)路徑是基于主機(jī)(host)的,也就是docker endpoint daemon所在的主機(jī)環(huán)境的。例如:

  1. 假設(shè)有主機(jī)路徑:/home/testuser/hello

  2. 第一個(gè)container啟動(dòng)參數(shù):-v /home/testuser/hello/:/home/hello/
    此時(shí)在第一個(gè)容器內(nèi)我們可以看到/home/hello路徑下面的內(nèi)容。

  3. 第二個(gè)container啟動(dòng)參數(shù):-v /home/hello/:/home/hello/
    此時(shí)在第二個(gè)container里面將不能看到/home/hello/的內(nèi)容,因?yàn)閐ocker daemon試圖映射主機(jī)上的路徑/home/hello/,而這個(gè)路徑在主機(jī)上是不存在的,主機(jī)上只有/home/testuser/hello/這個(gè)路徑,/home/hello/是第一個(gè)容器內(nèi)的路徑;也就是啟動(dòng)第二個(gè)容器(在第一個(gè)容器內(nèi)操作)的時(shí)候也要使用/home/testuser/hello/路徑來映射。

原因是命令都是發(fā)給docker demon來處理的,而docker daemon原始進(jìn)程運(yùn)行在主機(jī)環(huán)境,而不是容器環(huán)境,所以它是根據(jù)主機(jī)環(huán)境來處理命令的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容