Docker 使用命令时,Compose MariaDB 以代码 0 结尾
Docker Compose MariaDB ends with code 0 when using command
我有一个 dockercompose with MariaDB+PHPMyadmin。我在数据库服务中 运行 一些命令,但在它们之后以代码 0 结尾,而我期待一个 mariadb 服务器 运行。
我在没有命令的情况下检查了我的 docker-compose.yml,它工作正常。
这是我写的:
version: '3.1'
services:
db:
image: mariadb:10.3
command: |
sh -c " echo 'Starting Commands'&& apt-get update && apt-get install -y wget && wget https://downloads.mysql.com/docs/sakila-db.tar.gz && tar xzf sakila-db.tar.gz & & echo 'Extraction Finished' && mv sakila-db/sakila-schema.sql /docker-entrypoint-initdb.d/1.sql && mv sakila-db/sakila-data.sql /docker-entrypoint-initdb.d/2.sql && echo ' Finished Commands'"
environment:
MYSQL_ROOT_PASSWORD: notSecureChangeMe
phpmyadmin:
image: phpmyadmin
restart: always
ports:
- 8080:80
这是输出:
db_1 | Starting Commands
db_1 | Get:1
db_1 | Get:2
db_1 | Get:3
db_1 | Get:BLA BLA BLA
db_1 | Unpacking wget (1.20.3-1ubuntu1) ...
db_1 | Setting up wget (1.20.3-1ubuntu1) ...
db_1 | BLA BLA BLA
db_1 | Connecting to downloads.mysql.com (downloads.mysql.com)|137.254.60.14|:443... connected.
db_1 | HTTP request sent, awaiting response... 200 OK
db_1 | Length: 732133 (715K) [application/x-gzip]
db_1 | Saving to: 'sakila-db.tar.gz'
db_1 | BLA BLA BLA
db_1 | 2021-11-10 23:28:49 (1.25 MB/s) - 'sakila-db.tar.gz' saved [732133/732133]
db_1 |
db_1 | Extraction Finished
db_1 | Finished Commands
root_db_1 exited with code 0
我猜想“命令”函数可能覆盖了某些东西但找不到什么。
如果您查看 mariadb 的原始 Dockerfile,您会发现它们具有启动数据库的 ENTRYPOINT 和 CMD。
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["mysqld"]
因此请尝试将此添加到您 运行 的命令列表中,就像这样(注意命令列表中的最后一行):
db:
image: mariadb:10.3
command: |
sh -c "echo 'Starting Commands' && \
apt-get update && \
apt-get install -y wget && \
wget https://downloads.mysql.com/docs/sakila-db.tar.gz && \
tar xzf sakila-db.tar.gz && \
echo 'Extraction Finished' && \
mv sakila-db/sakila-schema.sql /docker-entrypoint-initdb.d/1.sql && \
mv sakila-db/sakila-data.sql /docker-entrypoint-initdb.d/2.sql && \
echo 'Finished Commands' && \
docker-entrypoint.sh mysqld"
environment:
MYSQL_ROOT_PASSWORD: notSecureChangeMe
执行到容器中并检查现有数据库:
root@c875454e15cb:/# mysql -u root -pnotSecureChangeMe -e "show databases"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila | <<<<<<<<<<<<<<<<<<<
+--------------------+
这是我的 docker-compose.yaml
中的 MariaDB 定义,我没有问题。
services:
mariadb:
image: mariadb:10.6-focal
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: <password>
MYSQL_DATABASE: <database>
volumes:
- mariadb-data:/var/lib/mysql
我有一个 dockercompose with MariaDB+PHPMyadmin。我在数据库服务中 运行 一些命令,但在它们之后以代码 0 结尾,而我期待一个 mariadb 服务器 运行。
我在没有命令的情况下检查了我的 docker-compose.yml,它工作正常。
这是我写的:
version: '3.1'
services:
db:
image: mariadb:10.3
command: |
sh -c " echo 'Starting Commands'&& apt-get update && apt-get install -y wget && wget https://downloads.mysql.com/docs/sakila-db.tar.gz && tar xzf sakila-db.tar.gz & & echo 'Extraction Finished' && mv sakila-db/sakila-schema.sql /docker-entrypoint-initdb.d/1.sql && mv sakila-db/sakila-data.sql /docker-entrypoint-initdb.d/2.sql && echo ' Finished Commands'"
environment:
MYSQL_ROOT_PASSWORD: notSecureChangeMe
phpmyadmin:
image: phpmyadmin
restart: always
ports:
- 8080:80
这是输出:
db_1 | Starting Commands
db_1 | Get:1
db_1 | Get:2
db_1 | Get:3
db_1 | Get:BLA BLA BLA
db_1 | Unpacking wget (1.20.3-1ubuntu1) ...
db_1 | Setting up wget (1.20.3-1ubuntu1) ...
db_1 | BLA BLA BLA
db_1 | Connecting to downloads.mysql.com (downloads.mysql.com)|137.254.60.14|:443... connected.
db_1 | HTTP request sent, awaiting response... 200 OK
db_1 | Length: 732133 (715K) [application/x-gzip]
db_1 | Saving to: 'sakila-db.tar.gz'
db_1 | BLA BLA BLA
db_1 | 2021-11-10 23:28:49 (1.25 MB/s) - 'sakila-db.tar.gz' saved [732133/732133]
db_1 |
db_1 | Extraction Finished
db_1 | Finished Commands
root_db_1 exited with code 0
我猜想“命令”函数可能覆盖了某些东西但找不到什么。
如果您查看 mariadb 的原始 Dockerfile,您会发现它们具有启动数据库的 ENTRYPOINT 和 CMD。
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["mysqld"]
因此请尝试将此添加到您 运行 的命令列表中,就像这样(注意命令列表中的最后一行):
db:
image: mariadb:10.3
command: |
sh -c "echo 'Starting Commands' && \
apt-get update && \
apt-get install -y wget && \
wget https://downloads.mysql.com/docs/sakila-db.tar.gz && \
tar xzf sakila-db.tar.gz && \
echo 'Extraction Finished' && \
mv sakila-db/sakila-schema.sql /docker-entrypoint-initdb.d/1.sql && \
mv sakila-db/sakila-data.sql /docker-entrypoint-initdb.d/2.sql && \
echo 'Finished Commands' && \
docker-entrypoint.sh mysqld"
environment:
MYSQL_ROOT_PASSWORD: notSecureChangeMe
执行到容器中并检查现有数据库:
root@c875454e15cb:/# mysql -u root -pnotSecureChangeMe -e "show databases"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila | <<<<<<<<<<<<<<<<<<<
+--------------------+
这是我的 docker-compose.yaml
中的 MariaDB 定义,我没有问题。
services:
mariadb:
image: mariadb:10.6-focal
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: <password>
MYSQL_DATABASE: <database>
volumes:
- mariadb-data:/var/lib/mysql