使用docker swarm时无法连接apache mysql

yjghlzjz  于 2022-10-22  发布在  Docker
关注(0)|答案(1)|浏览(322)

使用docker的新手。
我正在尝试使用docker swarm在GCP上的多个节点上部署我的webapp。我测试了我的docker作文。yml使用docker-compose-d*,它工作得很好。我能够连接并访问mysql数据库。
但后来我尝试使用***sudo docker stack deploy-c docker compose从管理器使用docker swarm进行部署。yaml social_network***,数据库连接出错。
我想问题是在docker compose中使用***image:php:8.1-apache***。yml,但使用图像对于dockerswarm是必要的。有什么解决办法吗?
docker-compose.yml

version: '3.3'
services:
  web:
    image: php:8.1-apache
    build:
      context: ./php
      dockerfile: Dockerfile
    container_name: php81
    depends_on:
      - db
    volumes:
       - ./src/social_network:/var/www/html/
    ports:
       - 8080:80
    deploy:
       replicas: 3

  db:
    container_name: mysql8
    image: mysql:latest
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root

    ports:
       - 6033:3306
    deploy:
       replicas: 3

  phpMyAdmin:
      image: phpmyadmin
      container_name: myphpMyAdmin

      environment:
        PMA_ARBITRARY: 1

      restart: always

      ports:
        - 8082:80

      deploy:
       mode: replicated
       replicas: 3

Dockerfile文件

FROM php:8.1-apache
RUN apt-get update && apt-get upgrade -y
RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli
EXPOSE 80

错误

<br /> <b>Fatal error</b>: Uncaught Error: Call to undefined function mysqli_connect() in /var/www/html/php/config.php:3 Stack trace: #0 /var/www/html/php/login.php(3): include_once() #1 {main} thrown in <b>/var/www/html/php/config.php</b> on line <b>3</b><br />

在配置中。php文件

$conn = mysqli_connect("db","root","root","social_network");
kokeuurv

kokeuurv1#

Docker swarm不支持build:,因此您的堆栈部署将使用您在编写中指示的基础php:8.1-apache映像。
您将需要构建自己版本的映像并将其发布到注册表-docker hub有一个免费层,GCP将有某种GCR,或者您只需将registry:2示例部署到您的swarm以自托管自己的映像。
更改docker组成。yml映像引用指向此存储库,然后您的构建过程可以是这样的:

docker compose build
docker compose push
docker stack deploy ...

相关问题