Docker Compose 在扩展容器时出现警告

3

我有这个docker-compose文件:

version: "3.8"
services:

  web:
    image: apachephp:v1
    ports:
      - "80-85:80"
    volumes:
      - volume:/var/www/html
    network_mode: bridge

  ddbb:
    image: mariadb:v1
    ports:
      - "3306:3306"
    volumes:
      - volume2:/var/lib/mysql
    network_mode: bridge
    environment:
      - MYSQL_ROOT_PASSWORD=*********
      - MYSQL_DATABASE=*********
      - MYSQL_USER=*********
      - MYSQL_PASSWORD=*********

volumes:
  volume:
    name: volume-data
  volume2:
    name: volume2-data

当运行以下代码时:
docker-compose up -d --scale web=2

它也可以正常工作,但会收到这个警告:

WARNING: The "web" service specifies a port on the host. If multiple containers for this service are created on a single host, the port will clash.

有人能帮助避免这些警告吗?谢谢您的帮助。

最好的问候。

1个回答

0

我猜您试图访问 Web 服务时,并不知道特定容器的端口以及如何将请求分发到这里的容器。如果我猜对了,为了实现这一点,您需要在系统配置中使用负载平衡机制。在下面的示例中,我将使用 NGINX 作为负载均衡器。

version: "3.8"
services:

  web:
    image: apachephp:v1
    expose: # change 'ports' to 'expose'
      - "7483" # <- this is web running port (Change to your web port) 
    ....

ddbb:
    ....
## New Start ##
nginx:
    image: nginx:latest
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    depends_on:
      - web # your web service name
    ports:
      - "80:80"
## New End ##
    
volumes:
  ...

如果您想要扩展服务,那么您不需要将Web服务的端口80-85:80映射到主机端口。因此,我从您的Docker Compose文件中删除了端口映射配置,并仅公开了上述端口:

在nginx服务中,我为该服务器添加了主机容器的端口映射。例如,我将NGINX配置为侦听端口4000,这就是为什么我们必须为此端口添加端口映射的原因。

nginx.conf文件内容:

user  nginx;

events {
    worker_connections   1000;
}
http {
        server {
              listen 4000;
              location / {
                proxy_pass http://pspdfkit:5000;
              }
        }
}

您可以在这里找到更多详细信息,以使用Docker Compose在开发中运行多个服务实例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接