V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fangwenxue
V2EX  ›  问与答

docker 容器互相访问问题

  •  
  •   fangwenxue · 2022-01-15 17:16:54 +08:00 · 2016 次点击
    这是一个创建于 1045 天前的主题,其中的信息可能已经有所发展或是发生改变。
    docker ps 
    
    c1c0fd7328d4   mongo                       "docker-entrypoint.s…"   About an hour ago   Up About an hour   0.0.0.0:27017->27017/tcp, :::27017->27017/tcp   mongodb
    

    另外一个 docker 访问 mongodb 的时候

    docker run -d \
    	--name=pylist \
    	-p 12133:8080 \
    	-e MONGO_URI=mongodb://root:xxx@mongodb:27017 \
    
    • ServerSelectionTimeoutError("mongodb:27017: [Errno -2] Name or service not known, Timeout: 30s

    • 容器之间互相怎么访问的?

    13 条回复    2022-01-22 10:16:17 +08:00
    siknet
        1
    siknet  
       2022-01-15 17:19:30 +08:00
    多挂个宿主目录啊,AB 都访问这个目录
    LLaMA2
        2
    LLaMA2  
       2022-01-15 17:27:30 +08:00
    docker network create brg-net
    docker run -it --name <容器名> —network brg-net --network-alias home_1 <镜像名>
    docker run -it --name <容器名> —network brg-net --network-alias school_1 <镜像名>

    如此这般,在 home_1 的环境中可以使用 school_1 的名字访问 school_1 的服务

    还有很多方法
    fangwenxue
        3
    fangwenxue  
    OP
       2022-01-15 18:24:21 +08:00
    @ye4tar 容器已经启动了,怎么添加网络
    sunny352787
        4
    sunny352787  
       2022-01-15 18:26:19 +08:00
    容器名叫 mongo 为啥访问地址写的 mongodb ?
    fangwenxue
        5
    fangwenxue  
    OP
       2022-01-15 18:33:39 +08:00
    @sunny352787 mongo 是镜像明。容器名是 mongodb
    sunny352787
        6
    sunny352787  
       2022-01-15 19:29:31 +08:00
    @fangwenxue 哦,看错了,那这个就是网络问题了,或者像二楼那样重新设置网络,或者用 docker-compose 重新组成一个集群,如果不想关容器的话,由于你已经对外映射了端口那么可以直接访问宿主机的 IP:27017 这样连接 mongo
    ETiV
        7
    ETiV  
       2022-01-15 19:32:04 +08:00
    docker run --help
    ...
    --link list Add link to another container
    ...
    lingex
        8
    lingex  
       2022-01-15 21:01:26 +08:00
    1.两个容器都使用 --net=host
    2.另一个容器 --link=mongo

    其中 2 这个方式有一些局限: 如果 mongo 容器没在运行,另一个容器也启动不了;
    并且如果 mongo 重建了,原先 link 它的容器也会失效

    用#2 的方式比较好。
    jfdnet
        9
    jfdnet  
       2022-01-15 21:05:15 +08:00
    可以用 --link 其他容器,如果某个容器对其他容器有依赖。
    xzysaber
        10
    xzysaber  
       2022-01-16 09:46:00 +08:00
    没有 link 。
    5200721
        11
    5200721  
       2022-01-16 13:41:56 +08:00 via Android
    docker network create xxx 然后容器启动的时候指定新建的网络 ,容器间就可以通过 name 访问了,如果已经启动的容器可以通过 docker network connect/disconnect 重新连接新网络
    gam2046
        12
    gam2046  
       2022-01-16 15:06:16 +08:00
    需要访问其他容器的容器在创建时添加 link 或 depend 参数,然后容器内可直接通过容器名进行访问。

    如果相互依赖的容器比较多,推荐使用 docker-compose 进行管理。
    LLaMA2
        13
    LLaMA2  
       2022-01-22 10:16:17 +08:00
    @fangwenxue
    docker container update —network brg-net --network-alias home_1 <容器名>
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3240 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:09 · PVG 21:09 · LAX 05:09 · JFK 08:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.