Консенсус заключается в использовании словаря для этого - см. другие ответы. Это хорошая идея для большинства случаев, однако есть много аспектов, связанных с этим:
Тем не менее, я реализовал 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)
Попробуйте запустить с указанным именем базы данных, например:
mysql -u test -p test app
Объяснение:
MYSQL_USER, MYSQL_PASSWORD Эти переменные являются необязательными и используются совместно создать нового пользователя и установить пароль этого пользователя. Этому пользователю будут предоставлены разрешения суперпользователя (см. Выше) для базы данных, указанной в переменной MYSQL_DATABASE. Обе переменные необходимы для создания пользователя.
blockquote>Со страницы MySQL Docker Hub
Разрешения предоставляются только для базы данных, указанной переменной среды. Когда вы пытаетесь войти в базу данных по умолчанию, у вас нет прав доступа только к базе данных приложения.
Мой полный файл 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
Может быть, вы могли бы попытаться подключить интерактивный процесс bash к уже запущенному контейнеру, выполнив следующие действия:
docker container ls
в своем терминале (я говорю о контейнере mysql, который должен иметь имя mysql
в соответствии с вашим файлом docker-compose.yml) docker exec -it mysql bash
, чтобы связать интерактивный процесс bash с работающим контейнером mysql --user=test --password=test
, и вы сможете продолжить свою работу