Docker: не удается подключиться к mysql под контейнером с параметрами docker-compose

Консенсус заключается в использовании словаря для этого - см. другие ответы. Это хорошая идея для большинства случаев, однако есть много аспектов, связанных с этим:

  • вы сами будете нести ответственность за этот словарь, включая сбор мусора (из переменных in-dict) и т. Д. .
  • нет никакой локальности или глобальности для переменных переменных, это зависит от глобальности словаря
  • , если вы хотите переименовать имя переменной, вам придется сделать это вручную
  • однако вы гораздо более гибкие, например вы можете решить перезаписать существующие переменные или ... ... выбрать реализацию константных переменных для создания исключения при перезаписи для разных типов и т. д.

Тем не менее, я реализовал variable variables manager -класс, который предоставляет некоторые из вышеперечисленных идей. Он работает для python 2 и 3.

Вы использовали бы класс следующим образом:

from variableVariablesManager import VariableVariablesManager

myVars = VariableVariablesManager()
myVars['test'] = 25
print(myVars['test'])

# define a const variable
myVars.defineConstVariable('myconst', 13)
try:
    myVars['myconst'] = 14 # <- this raises an error, since 'myconst' must not be changed
    print("not allowed")
except AttributeError as e:
    pass

# rename a variable
myVars.renameVariable('myconst', 'myconstOther')

# preserve locality
def testLocalVar():
    myVars = VariableVariablesManager()
    myVars['test'] = 13
    print("inside function myVars['test']:", myVars['test'])
testLocalVar()
print("outside function myVars['test']:", myVars['test'])

# define a global variable
myVars.defineGlobalVariable('globalVar', 12)
def testGlobalVar():
    myVars = VariableVariablesManager()
    print("inside function myVars['globalVar']:", myVars['globalVar'])
    myVars['globalVar'] = 13
    print("inside function myVars['globalVar'] (having been changed):", myVars['globalVar'])
testGlobalVar()
print("outside function myVars['globalVar']:", myVars['globalVar'])

Если вы хотите разрешить переписывание переменных с помощью только тот же тип:

myVars = VariableVariablesManager(enforceSameTypeOnOverride = True)
myVars['test'] = 25
myVars['test'] = "Cat" # <- raises Exception (different type on overwriting)

0
задан mohaskh 23 March 2019 в 20:59
поделиться

3 ответа

Попробуйте запустить с указанным именем базы данных, например:

mysql -u test -p test app

Объяснение:

MYSQL_USER, MYSQL_PASSWORD Эти переменные являются необязательными и используются совместно создать нового пользователя и установить пароль этого пользователя. Этому пользователю будут предоставлены разрешения суперпользователя (см. Выше) для базы данных, указанной в переменной MYSQL_DATABASE. Обе переменные необходимы для создания пользователя.

Со страницы MySQL Docker Hub

Разрешения предоставляются только для базы данных, указанной переменной среды. Когда вы пытаетесь войти в базу данных по умолчанию, у вас нет прав доступа только к базе данных приложения.

0
ответ дан Konrad Sitarz 23 March 2019 в 20:59
поделиться

Мой полный файл docker-compose.

version: '3.2'
services:
    apache:
        container_name: apache
        build: .docker/apache/
        restart: always
        volumes:
            - .:/var/www/html/app/
        ports:
            - 80:80
        depends_on:
            - php
            - mysql
        links:
            - mysql:mysql
    php:
        container_name: php
        build: .docker/php/
        restart: always
        volumes:
            - .:/var/www/html/app/
        working_dir: /var/www/html/app/

    mysql:
        container_name: mysql
        image: mysql
        restart: always
        volumes:
            - .docker/data/db:/var/lib/mysql
        environment:
            MYSQL_DATABASE: app
            MYSQL_ROOT_PASSWORD: test
            MYSQL_USER: test
            MYSQL_PASSWORD: test

0
ответ дан mohaskh 23 March 2019 в 20:59
поделиться

Может быть, вы могли бы попытаться подключить интерактивный процесс bash к уже запущенному контейнеру, выполнив следующие действия:

  • Получите идентификатор или имя вашего контейнера, запустив docker container ls в своем терминале (я говорю о контейнере mysql, который должен иметь имя mysql в соответствии с вашим файлом docker-compose.yml)
  • Запустить docker exec -it mysql bash, чтобы связать интерактивный процесс bash с работающим контейнером
  • Сейчас находясь внутри файловой системы вашего контейнера, запустите mysql --user=test --password=test, и вы сможете продолжить свою работу
0
ответ дан Marccio Silva 23 March 2019 в 20:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: