我遇到了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
但是数据库没有密码。我该如何解决?
答案 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_PASSWORD
,MYSQL_ALLOW_EMPTY_PASSWORD
和MYSQL_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