Mysql Docker compose:数据库未初始化

Mysql Docker compose:数据库未初始化,mysql,docker,docker-compose,Mysql,Docker,Docker Compose,我对docker compose和mysql有问题: docker-compose.yml version: '2' services: db: image: mysql volumes: - "./sito/db/:/var/lib/mysql" ports: - "3306:3306" restart: always environment: MYSQL_ROOT_PASSWORD: app:

我对docker compose和mysql有问题:

docker-compose.yml

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD:

   app:
    depends_on:
      - db
    image: eboraas/apache-php
    links:
      - db
    ports:
      - "80:80"
    volumes:
      - ./sito/:/var/www/html/
撰写此容器时出错:

Recreating phpapp_phpapache_1
Attaching to phpapp_db_1, phpapp_phpapache_1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
phpapache_1 | AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.30.0.3. Set the 'ServerName' directive globally to suppress this message
phpapp_db_1 exited with code 1
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified 
db_1 | You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
db_1 | error: database is uninitialized and password option is not specified

但是数据库没有密码。我该怎么解决呢?

看起来您正在将MYSQL\u ROOT\u密码设置为空。根据文件,这是必需的

MYSQL\u ROOT\u密码

此变量是必需的,指定将为MySQL根超级用户帐户设置的密码

根据,您必须使用-=来代替
MYSQL\u ROOT\u密码:
,并且还应该使用“密码” 结果将是:

-MYSQL\u ROOT\u PASSWORD=some\u PASSWORD

在您的示例中:

version: '2' 
  services:
   db:
    image: mysql
    volumes:
      - "./sito/db/:/var/lib/mysql"
    ports:
      - "3306:3306"
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=some_password

如果不为
MYSQL\u ROOT\u PASSWORD
指定一个值,则会出现问题(其他情况将在下面解释)

您可以使用以下语法之一:

# syntax 1
environment:
  MYSQL_ROOT_PASSWORD: strongrootpassword
如果您希望使用空/空密码,请使用以下密码:

MYSQL_ALLOW_EMPTY_PASSWORD=1
MYSQL_RANDOM_ROOT_PASSWORD=1
如果要设置随机密码,请使用以下命令:

MYSQL_ALLOW_EMPTY_PASSWORD=1
MYSQL_RANDOM_ROOT_PASSWORD=1
然后,您可以使用

docker logs container_name_or_id 
最后需要根据MYSQL镜像的入口点,指定一个MYSQL\u ROOT\u密码,
MYSQL\u允许\u空密码
MYSQL\u随机\u ROOT\u密码

  • -z
    用于验证变量是否为空
if[-z“$MYSQL\u ROOT\u PASSWORD”-a-z“$MYSQL\u ALLOW\u EMPTY\u PASSWORD”-a-z“$MYSQL\u RANDOM\u ROOT\u PASSWORD”];然后
echo>&2'错误:数据库未初始化,未指定密码选项'
echo>&2“您需要指定MYSQL\u ROOT\u密码、MYSQL\u ALLOW\u EMPTY\u密码和MYSQL\u RANDOM\u ROOT\u密码中的一个”
出口1
fi

我只想指出一点,如果在终端中使用
docker run
命令而不是docker compose,这将是命令:

docker run -e MYSQL_ROOT_PASSWORD=password mysql_image
请注意如果您将
-e MYSQL\u ROOT\u PASSWORD=PASSWORD
放在
MYSQL\u image

之后,我们可以使用

docker container run -d --name mysql -e MYSQL_RANDOM_ROOT_PASSWORD=password mysql

您可以提供任何名称和密码

可能的大。。。你是怎么做到的<代码>docker run-e MYSQL\u ROOT\u PASSWORD=ROOT不起作用。看看官方文件。如果在容器中运行
printenv
,您应该会看到env变量集。您好,Mostafa,我无法使用docker日志访问生成的密码,我如何访问密码?这不是应该使用的
MYSQL\u RANDOM\u ROOT\u password
。它需要
true
false
值(默认为true)才能生成随机密码,除非设置了
MYSQL\u ROOT\u password
。有关更多详细信息,您可以查看以下内容