如何使用可访问的 docker-compose 设置特定的 IP 地址

Posted

技术标签:

【中文标题】如何使用可访问的 docker-compose 设置特定的 IP 地址【英文标题】:How to set a specfic ip address with docker-compose who's accessible 【发布时间】:2017-02-21 21:53:36 【问题描述】:

目前我在玩 Docker,我喜欢它,但是如何使用 docker-compose 设置 IP 地址?

这是我的问题,在 docker-compose 网站上是 Wordpress 的快速入门示例。

version: '2'
services:
  db:
    image: mysql:5.7
    volumes:
   - "./.data/db:/var/lib/mysql"
 restart: always
 environment:
   MYSQL_ROOT_PASSWORD: wordpress
   MYSQL_DATABASE: wordpress
   MYSQL_USER: wordpress
   MYSQL_PASSWORD: wordpress

 wordpress:
   depends_on:
     - db
   image: wordpress:latest
   links:
     - db
   ports:
     - "8000:80"
   restart: always
   environment:
     WORDPRESS_DB_HOST: db:3306
     WORDPRESS_DB_PASSWORD: wordpress

现在我希望 Wordress-Site 在 IP 地址 10.10.10.25 下可用,我该怎么做?

使用 Docker-compose 可以吗?

编辑

所以我尝试建立我的网络,但它不起作用。

 version: '2'
    services:
      db:
        image: mysql:5.7
        volumes:
          - "./.data/db:/var/lib/mysql"
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: wordpress
          MYSQL_DATABASE: wordpress
          MYSQL_USER: wordpress
          MYSQL_PASSWORD: wordpress
        networks:
          mynet:
            ipv4_address: 172.25.0.102
      wordpress:
        depends_on:
          - db
        image: wordpress:latest
        links:
          - db
        ports:
          - "8000:80"
        restart: always
        environment:
          WORDPRESS_DB_HOST: db:3306
          WORDPRESS_DB_PASSWORD: wordpress
        networks:
          mynet:
            ipv4_address: 172.25.0.101
    networks:
      mynet:
        driver: bridge
        ipam:
          config:


 subnet: 172.25.0.0/24

它只收到以下错误消息。

wordpress_1 |警告:mysqli::mysqli(): (HY000/2002): Connection 拒绝在 - 在第 19 行 wordpress_1 | wordpress_1 | MySQL 连接错误:(2002)连接被拒绝 wordpress_1 | AH00558: apache2:无法可靠地确定服务器的完全合格 域名,使用 172.25.0.101。设置“服务器名称”指令 全局禁止此消息 wordpress_1 | AH00558:阿帕奇2: 无法可靠地确定服务器的完全限定域名, 使用 172.25.0.101。将“ServerName”指令全局设置为 压制

【问题讨论】:

您希望您的 WP 容器在您的 docker 网络中拥有该特定地址? 从您的更新看来,您已成功在 docker-compose.yml 中指定了所需的 IP 地址,现在又出现了不同的错误。 【参考方案1】:

docker 模型不是创建具有特定 IP 的容器,而是仅公开和发布您需要从外部访问的容器中的端口。因此,您将在 docker-compose.yml 中为服务包含以下内容:

ports:
  - 8080:80

这会将到达主机 8080 的所有流量引导到容器的端口 80。您可以根据需要调整这些端口,甚至使它们相同。然后所有试图到达您的 wordpress 服务器的外部流量都转到 http://your.docker.host:8080(对于本地测试,应该是 http://localhost:8080)。

如果你真的需要指定一个容器的IP地址是可以的,但是你需要先定义你自己的网络,然后在那个网络上运行容器(给它一个IP),然后你需要更新您的路由器或网络上的其他主机上的路由将流量发送到该 IP 的 docker 主机,您可能会发现您的默认 iptables 规则不允许流量到该容器。因此,我不建议走这条路。

【讨论】:

以上是关于如何使用可访问的 docker-compose 设置特定的 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

如何在 docker-compose 中访问 Postgres 数据库

如何将 UserControl 中的控件设为私有?

如何将 Nginx 反向代理到本地托管(在具有 ssh 访问权限的服务器上)docker-compose

如何使用 Docker-Compose 文件运行 Phpmyadmin、Mysql 和 Apache Tomcat?

如何挂载容器可写主机目录?

docker-compose部署mysql无法访问