Docker-compose:数据库未初始化

时间:2016-09-24 16:21:00

标签: mysql docker docker-compose

我遇到了docker-compose和mysql的问题:

搬运工-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

但是数据库没有密码。我该如何解决?

8 个答案:

答案 0 :(得分:6)

根据documentation,您必须使用 - = 而不是MYSQL_ROOT_PASSWORD:,而且还应使用密码& #39; 结果将是:

- MYSQL_ROOT_PASSWORD=some_password

在你的例子中:

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

答案 1 :(得分:4)

您似乎将tsc --sourcemap greeter.ts设置为空。根据文档,它是必需的。

https://hub.docker.com/_/mysql/

  

MYSQL_ROOT_PASSWORD

     

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

答案 2 :(得分:1)

如果您没有为MYSQL_ROOT_PASSWORD指定值,则会出现问题(其他情况在下面说明)。

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

# syntax 1
environment:
  MYSQL_ROOT_PASSWORD: strongrootpassword
# syntax 2
environment:
 - MYSQL_ROOT_PASSWORD=strongrootpassword

如果您希望使用空白/空密码,请使用以下密码:

MYSQL_ALLOW_EMPTY_PASSWORD=1

如果您希望设置随机密码,请使用以下密码:

MYSQL_RANDOM_ROOT_PASSWORD=1

然后您可以使用来获取生成的密码

docker logs container_name_or_id 

最后,您需要根据MySQL映像的入口点,在MYSQL_ROOT_PASSWORDMYSQL_ALLOW_EMPTY_PASSWORDMYSQL_RANDOM_ROOT_PASSWORD中指定 ONE

  • -z用于验证变量不为空
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
    echo >&2 'error: database is uninitialized and password option is not specified '
    echo >&2 '  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
    exit 1
fi

答案 3 :(得分:1)

我们可以使用

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

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

答案 4 :(得分:0)

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

docker run -e MYSQL_ROOT_PASSWORD=password mysql_image

请注意,如果您将-e MYSQL_ROOT_PASSWORD=password放在mysql_image之后,它将不起作用

答案 5 :(得分:0)

如前所述,为 MYSQL_ROOT_PASSWORD 部分中的 environment 项目分配一个实际值。有关我以前使用过的示例的参考,请参见此处:

https://github.com/alexmacarthur/local-docker-db/blob/master/mysql/docker-compose.yml#L12

如果您不想将密码存储在您的 docker-compose.yml 文件中,您还可以传递一个包含该值的 .env 文件,然后在您的存储库中忽略该文件。其外观示例如下(使用 DyanmoDB,但概念相同):

https://github.com/alexmacarthur/local-docker-db/blob/master/dynamo/docker-compose.yml#L17

答案 6 :(得分:0)

您还可以添加健康检查以确保您的数据库在您的 php 应用程序启动之前可用

db:
image: mysql
container_name: ${MYSQL_SERVER_NAME}
ports:
    - "${MYSQL_LOCALPORT}:${MYSQL_PORT}"
environment:
    - "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}"
    - "MYSQL_USER=${MYSQL_USER}"
    - "MYSQL_PASSWORD=${MYSQL_PASSWORD}"
healthcheck:
        test: ["CMD", "mysqladmin" ,"ping", "-h", "${MYSQL_SERVER_NAME}"]
        timeout: 10s
        retries: 10
restart: always

并将其添加到您的应用中:

    depends_on: 
    db:
        condition: service_healthy

答案 7 :(得分:0)

以防万一有人像我一样来到这里

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql

在这里休息https://hub.docker.com/_/mysql