【问题标题】:docker compose up nginx reverse proxy not adding containers to docker0 bridgedocker组成nginx反向代理不将容器添加到docker0桥
【发布时间】:2018-01-07 04:55:31
【问题描述】:

在我执行docker-compose up 之后,它会启动容器。 当我执行docker ps 时,我得到以下信息,它告诉我容器正在运行。但是,当我执行docker network inspect bridge 时,结果显示docker0 桥没有容器部分。

当我执行 docker run meanchat_myserver 时,它实际上确实显示在 docker0 上,而且我还获得了服务器在 port 3000 上运行的数据。 我没有通过使用docker-compose 得到。

我在这里做错了什么?

我读到,当我使用docker0 时,我只能参考 IP 来连接到其他容器,而不是名称。我可以假设容器上的 ip 没有改变,并且这在生产中部署应用程序时没有问题吗?

  02cf08b1c3da        d57f06ba9c68        "npm start"              33 minutes ago      Up 33 minutes       4200/tcp             meanchat_client_1
  e257063c9e21        meanchat_myserver   "npm start"              33 minutes ago      Up 33 minutes       3000/tcp             meanchat_myserver_1
  02441c2e43f5        e114a298eabd        "npm start"              About an ago         Up 33 minutes       0.0.0.0:80->80/tcp   meanchat_nginx_1
  88d9841d2553        mongo               "docker-entrypoint..."   3 hours ago         Up 3 hours          27017/tcp            meanchat_mongo_1

作曲

version: '3'

services:
# Build the container using the client Dockerfile
    client:
        build: ./
        # This line maps the contents of the client folder into the container.
        volumes:
            - ./:/usr/src/app

    myserver:
        build: ./express-server
        volumes:
            - ./:/usr/src/app
        depends_on:
            - mongo

    nginx:
        build: ./nginx
        # Map Nginx port 80 to the local machine's port 80
        ports:
            - "80:80"
        # Link the client container so that Nginx will have access to it

    mongo:
        environment:
            - AUTH=yes
            - MONGO_INITDB_ROOT_USERNAME=superAdmin
            - MONGO_INITDB_ROOT_PASSWORD=admin123
            - MONGO_INITDB_DATABASE=d0c4ae452a5c
        image: mongo
        volumes:
            - /var/mongodata/data:/data/db

【问题讨论】:

  • 你的意思是$docker network inspect bridge -f "{{.Containers}}"返回空?
  • 是的,合成后它显示为空,当我手动运行它们显示在桥中的图像时。这是正常行为吗?
  • 所以现在,我删除了所有容器。 Docker ps 为空。我现在正在运行 docker-compose up -d --build --remove-orphans 成功构建 cfb1f18e9c0c 成功标记 meanchat_myserver:latest 正在启动 meanchat_nginx_1 ... 正在启动 meanchat_client_1 ... 正在启动 meanchat_mongo_1 ... 正在启动 meanchat_nginx_1 正在启动 meanchat_client_1 正在启动 meanchat_mongo_1 ...完成 创建 meanchat_myserver_1 ... 启动 meanchat_client_1 ... 完成然后 docker network inspect bridge 等返回空。当我做 docker ps 然后运行它在检查桥时显示的图像之一

标签: docker nginx docker-compose reverse-proxy bridge


【解决方案1】:

默认情况下,Compose 会为您的应用设置一个网络。

更多详情,请参考link

这意味着containerscompose 默认不会位于默认bridge network 中。

您可以通过该命令检查containerscompose 正在使用哪个网络。

docker inspect $container_name -f "{{.NetworkSettings.Networks}}"

但是,如果您希望containers 成为默认的bridge network,您可以使用network_mode

services:
    service_name:
        # other options....
        network_mode: bridge 

【讨论】:

  • docker inspect meanchat_client -f "{{.NetworkSettings.Networks}}" 模板解析错误:模板::1:18:在 <.networksettings.net...> 处执行“”:地图有当我提到 let url = 'myserver:3000/api/register' 时,没有键“NetworkSettings”的条目;在我的注册组件中,当我使用容器的 ip 而不是名称 myserver 它超时时,它给了我一个 p://myserver:3000/api/register net::ERR_NAME_NOT_RESOLVED。
  • 当我执行 netstat -a 时,它不显示端口 3000 或 4200。这是正确的 TCP 0.0.0.0:80 mine-PC:0 LISTENING TCP 0.0.0.0:135 mine-PC: 0 监听 TCP 0.0.0.0:445 mine-PC:0 监听 TCP 0.0.0.0:2179 mine-PC:0 监听 TCP 0.0.0.0:7680 mine-PC:0 监听 TCP 0.0.0.0:49664 mine-PC:0 监听TCP 0.0.0.0:49665 mine-PC:0 LISTENING?
  • docker network ls 现在确实显示了默认网络。 App_default 当我检查这个网络时,我确实看到了我的 4 个容器。当我从服务器到客户端执行停靠 exec ping 时,这似乎有效。但是我不能引用容器的名称,给我一个解决错误。
  • 通常,docker 不会将完整的容器名称指定为别名。如果要为容器分配特定别名,可以使用aliases
  • 我应该如何对服务器容器进行http调用,使用别名而不是ip是否正常,我在哪里可以阅读这个?以及如何确定 mongo 图像是否有效?我似乎无法登录 mongo 映像。
猜你喜欢
  • 2021-05-04
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 1970-01-01
  • 2020-09-10
  • 2017-03-21
相关资源
最近更新 更多