Docker组成网桥网络

时间:2019-01-28 16:54:10

标签: ruby-on-rails docker networking docker-compose bridge

我正在一个有2个docker compose文件的项目中。 一方面,我的堆栈上装有Rails服务器。

version: '3'
  services:
    web:
      entrypoint: ["./docker-entrypoint.sh"]
      build:
        context: .
        dockerfile: <MY FILE>
        command: bundle exec rails s -b 'ssl://0.0.0.0?key=/app/ssl/server.key&cert=/app/ssl/server.crt'
       volumes:
         - .:/app
       ports:
         - "443:3000"
       stdin_open: true
       tty: true
       networks:
         - ekoma
networks:
  ekoma:
    driver: bridge

另一方面,我有一个wordpress实例

version: '3'
  services:
    wordpress:
      image: wordpress:latest
    ports:
      - 8888:80
    networks:
      - app_ekoma
networks:
  app_ekoma:
    external:
      name: app_ekoma

我正在简化撰写文件,但是如果需要,我可以提供更多文件。 出于某种原因,在我的wordpress实例中,我可以使用“网络”主机,甚至可以发起curl调用: curl web:3000

但是请求挂起并且没有完成。

这也可能是Rails服务器的问题,但我将其用作API,并且从网络外部,连接到localhost:443都没有问题。

感谢您的光临,任何想法都将不胜感激:)

1 个答案:

答案 0 :(得分:0)

您可以创建一个 User-defined Bridge network,然后将您的两个容器连接到您的桥接网络。

创建桥:

>> docker network create --driver bridge my-user-defined-bridge-net

然后进行健全性检查以查看与它相关的内容(现在不应连接任何内容):

>> docker network inspect my-user-defined-bridge-net

向下滚动输出,直到看到 Containers 道具,其中列出了连接的容器。现在,它应该是空的:

"Containers": {}

接下来,在您的每个 docker-compose 文件中,将容器连接到我们刚刚创建的网桥。

您的第一个文件将是:

version: '3'
  services:
    web:
      container_name: container_one
      entrypoint: ["./docker-entrypoint.sh"]
      build:
        context: .
        dockerfile: <MY FILE>
        command: bundle exec rails s -b 'ssl://0.0.0.0?key=/app/ssl/server.key&cert=/app/ssl/server.crt'
       volumes:
         - .:/app
       ports:
         - "443:3000"
       stdin_open: true
       tty: true
       networks:
         - ekoma

networks:
  ekoma:
    external:
      name: my-user-defined-bridge-net

你的第二个文件是:

version: '3'
  services:
    wordpress:
      container_name: container_two
      image: wordpress:latest
      ports:
        - 8888:80
      networks:
        - app_ekoma

networks:
  app_ekoma:
    external:
      name: my-user-defined-bridge-net

使用这些新的 docker-compose 文件重新启动两个容器并检查网桥的状态:

>> docker network inspect my-user-defined-bridge-net

现在应该显示 "Containers" 道具

"Containers": {
            "asdfasdfasdfasdfasdfasdfasdfasdfasdf1324654a1sd65fa56sdf": {
                "Name": "container_one",
                "EndpointID": "51asdf5sd651as65d1f1a65sdf1a63sd5f1asd65fa56sdf56asd6f5a65s1df",
                "MacAddress": "02:42:ac:1d:00:02",
                "IPv4Address": "172.29.0.2/16",
                "IPv6Address": ""
            },
            "a6s51dfa65sd1fas6d5f1a6s5df0asd65f0a6sd5f41asd658f4sdf": {
                "Name": "container_two",
                "EndpointID": "6a5sdfa65sd1fa6s5df1as6d51fas6d51fa6s5d1f6a5sd16sd6a1s",
                "MacAddress": "02:42:ac:1d:00:03",
                "IPv4Address": "172.29.0.3/16",
                "IPv6Address": ""
            }
        },