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