Запуск MySql на другом порту от Docker - PullRequest
3 голосов
/ 23 февраля 2020

У меня проблема, аналогичная Выполнить MySQL на порту 3307 с использованием Docker Составить , но либо я не вижу дрова для деревьев, либо решение здесь не работает.

У меня есть следующий docker -compose.yml файл:

version: '3'
services:
    db:
        image: mysql:5.7
        container_name: squirrels_db
        volumes:
          - db_data:/var/lib/docker/volumes/squirrels_db_data/_data
        restart: always
        ports:
          # <Port exposed> : <MySQL Port running inside container>
          - 3310:3306
        environment:
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: wordpress
            MYSQL_USER: mydb_user
            MYSQL_PASSWORD: password
        volumes:
          - ./var/lib/docker/volumes/squirrels_db_data/_data
        networks:
          internal-net:
            ipv4_address: 172.29.0.11

    wordpress:
        image: wordpress:latest
        container_name: squirrels_web
        depends_on:
            - db
        ports:
           - 8000:80
        restart: always
        environment:
            WORDPRESS_DB_HOST: db:3306
            WORDPRESS_DB_USER: mydb_user
            WORDPRESS_DB_NAME: mydb_name
            WORDPRESS_DB_PASSWORD: password

        volumes:
          - ./data/wp_content:/var/www/html/wp-content
          - ./config/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
        networks: 
          nginx-proxy:
          internal-net:
            ipv4_address: 172.29.0.12      

# Names our volume
volumes:
  db:

networks:
  nginx-proxy:
    external:
      name: nginx-proxy
  internal-net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.29.0.0/16

Примечание : я изменил здесь имена пользователей и пароли и в итоге получу их в файле .env

Когда я нажимаю http://localhost: 8000 Я вижу сообщение WordPress «Ошибка при установлении соединения с базой данных» и следующее в журнале (из docker -составить журналы):

PHP Предупреждение: mysqli :: __ construct (): (HY000 / 2002): соединение отклонено в стандартном коде ввода в строке 22 * ​​1029 * Ошибка соединения: (2002) Соединение отклонено

Это теперь официально сводит меня с ума, совсем не помогает, просто зная, что я упускаю что-то очевидное! Итак, любые замечания или предложения с благодарностью получили

Спасибо

1 Ответ

1 голос
/ 23 февраля 2020

Мне удалось заставить его работать. Вот рабочий файл - я объясню мои изменения ниже:

version: "3"
services:
  db:
    image: mysql:5.7
    container_name: squirrels_db
    volumes:
      # You prepended with db_data: but volume was called db – scroll down to volumes to see my fix
      - db_data:/var/lib/docker/volumes/squirrels_db_data/_data
    restart: always
    ports:
      # <Port exposed> : <MySQL Port running inside container>
      - 3310:3306
    environment:
      MYSQL_ROOT_PASSWORD: password
      # This is likely the isse - you called it wordpress but tried to connect to mydb_name in the wordpress container
      MYSQL_DATABASE: mydb_name
      MYSQL_USER: mydb_user
      MYSQL_PASSWORD: password
    # REMOVE BELOW 2 LINES - you declared above
    # volumes:
    #   - ./var/lib/docker/volumes/squirrels_db_data/_data
    networks:
      internal-net:
        ipv4_address: 172.29.0.11

  wordpress:
    image: wordpress:latest
    container_name: squirrels_web
    depends_on:
      - db
    ports:
      - 8000:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: db # db:3306 is fine but that's default so removed
      WORDPRESS_DB_USER: mydb_user
      WORDPRESS_DB_NAME: mydb_name
      WORDPRESS_DB_PASSWORD: password
    volumes:
      - ./data/wp_content:/var/www/html/wp-content
      - ./config/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
    networks:
      nginx-proxy:
      internal-net:
        ipv4_address: 172.29.0.12

# Names our volume
volumes:
  # FIX: renamed from db to db_data. Added {} to declare an empty volume
  db_data: {}

networks:
  nginx-proxy:
    external:
      name: nginx-proxy
  internal-net:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.29.0.0/16

Изменения

  1. Я думаю, что ваш отступ был в порядке - но я изменил это как первый тест

  2. В вашем контейнере БД было объявлено 2 ключа тома. первый был на первый взгляд правильным, во втором отсутствовал том db_data: том, предшествующий пути.

  3. Ваш том получил имя db, но использовался (как в пункте 2) как db_data

  4. Ваши имена баз данных не совпадают. Вы вызвали db wordpress при настройке на MYSQL_DATABASE: wordpress, затем попытались подключиться к mydb_name на WORDPRESS_DB_NAME: mydb_name

Более простое решение

Хотя вышеприведенное работает, вы определенно нужна сеть? Ниже также будет работать и гораздо проще:

version: "3"
services:
  db:
    image: mysql:5.7
    container_name: squirrels_db
    volumes:
      - db_data:/var/lib/docker/volumes/squirrels_db_data/_data
    restart: always
    ports:
      - 3310:3306
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: mydb_name
      MYSQL_USER: mydb_user
      MYSQL_PASSWORD: password

  wordpress:
    image: wordpress:latest
    container_name: squirrels_web
    depends_on:
      - db
    ports:
      - 8000:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: mydb_user
      WORDPRESS_DB_NAME: mydb_name
      WORDPRESS_DB_PASSWORD: password
    volumes:
      - ./data/wp_content:/var/www/html/wp-content
      - ./config/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

volumes:
  db_data: {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...