【问题标题】:IP addressing error with docker with docker-compose使用 docker-compose 使用 docker 的 IP 寻址错误
【发布时间】:2021-09-01 13:28:28
【问题描述】:

我已经使用 docker-compose 在两个 ubuntu vps 上安装了两个相同的 docker。 令人担忧的是,第一个效果很好,并且它之间的对话很好,第二个不行。 我看到的是1 /中默认设置的ip是172.X.X.X,2 /中设置的ip是192.X.X.X。 我在处女 vps,没有特定的配置文件......但我不明白这是怎么可能的。 这是 docker-compose

version: '2.4'
services:
  redis:
    image: redis:alpine



 db:
    image: mariadb:10.5
    working_dir: /application
    command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --innodb-file-format=Barracuda, --innodb-large-prefix=1, --innodb-file-per-table=1]
    volumes:
      - pimcore-demo-database:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=ROOT
      - MYSQL_DATABASE=pimcore
      - MYSQL_USER=pimcore
      - MYSQL_PASSWORD=pimcore

  php:
    image: pimcore/pimcore:PHP8.0-apache
    volumes:
      - .:/var/www/html:cached
    ports:
     - 80:80
     - 443:443
    environment:
     - APACHE_DOCUMENT_ROOT=/var/www/html/public

  php-debug:
    image: pimcore/pimcore:PHP8.0-apache-debug
    volumes:
      - .:/var/www/html:cached
    ports:
     - 88:80
    environment:
      - PHP_IDE_CONFIG="serverName=localhost"
      - APACHE_DOCUMENT_ROOT=/var/www/html/public

volumes:
  pimcore-demo-database:

提前谢谢你

【问题讨论】:

  • 为什么特定的 IP 地址很重要?一般来说,Docker 会自己分配 IP 地址,并安排一些事情,以便 Compose 服务名称可以用作主机名;您通常不需要查看确切的地址。
  • 确实,问题在于 docker 无法从外部访问,因此 Php 砖无法与 db 对话。所以我比较了另一个 vps 上的相同安装,这就是我注意到的不同之处。那么为什么docker会自动分配一个不可达的ip呢?

标签: docker docker-compose bridge


【解决方案1】:

好的解决方案:

sudo snap remove docker
sudo rm -R /var/lib/docker
sudo apt-get remove docker docker-engine docker.io
sudo apt-get update
https://doc.ubuntu-fr.org/docker
systemctl start docker

【讨论】:

    【解决方案2】:

    尝试在 compose yml 中添加网络配置以使用特定 IP,如下所示:

    更多信息https://docs.docker.com/compose/networking/#use-a-pre-existing-network

    version: '2.4'
    services:
      redis:
        image: redis:alpine
    
     db:
        image: mariadb:10.5
        working_dir: /application
        command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --innodb-file-format=Barracuda, --innodb-large-prefix=1, --innodb-file-per-table=1]
        volumes:
          - pimcore-demo-database:/var/lib/mysql
        environment:
          - MYSQL_ROOT_PASSWORD=ROOT
          - MYSQL_DATABASE=pimcore
          - MYSQL_USER=pimcore
          - MYSQL_PASSWORD=pimcore
        networks:           # <-- Add this line
          - you_own_network # <-- Add this line
    
      php:
        image: pimcore/pimcore:PHP8.0-apache
        volumes:
          - .:/var/www/html:cached
        ports:
         - 80:80
         - 443:443
        environment:
         - APACHE_DOCUMENT_ROOT=/var/www/html/public
        networks:           # <-- Add this line
          - you_own_network # <-- Add this line
    
      php-debug:
        image: pimcore/pimcore:PHP8.0-apache-debug
        volumes:
          - .:/var/www/html:cached
        ports:
         - 88:80
        environment:
          - PHP_IDE_CONFIG="serverName=localhost"
          - APACHE_DOCUMENT_ROOT=/var/www/html/public
        networks:           # <-- Add this line
          - you_own_network # <-- Add this line
    
    volumes:
      pimcore-demo-database:
    
    networks:               # <-- Add this block
      you_own_network:
        driver: bridge
        ipam:
          driver: default
          config:
            - subnet: 172.123.123.0/24
    

    【讨论】:

    • (如果您将自定义网络命名为defaultit sets configuration for the network Compose creates for you,并且您不需要为每个服务添加networks: 块。)
    • 抱歉还是不行。实际上,问题在于无法从外部访问 docker,因此 Php 砖无法与 db 对话。所以我比较了另一个 vps 上的相同安装,这就是我注意到的不同之处。那么为什么docker会自动分配一个无法访问的ip呢?或者为什么默认情况下我的 docker 不可访问?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2018-04-14
    • 2017-12-14
    • 2015-05-17
    • 2017-05-03
    • 2021-11-24
    • 2016-01-06
    相关资源
    最近更新 更多