Dockerfile在使用docker run后立即停止

4nkexdtk  于 2023-06-21  发布在  Docker
关注(0)|答案(1)|浏览(178)

我有一个关于我的Dockerfile的问题,事实上,一旦构建了镜像,它在使用docker run命令运行后立即停止,我的Dockerfile基础镜像是alpine:3.18,我在容器内运行Mariadb。
下面是Dockerfile:

FROM alpine:3.18

ARG APP_USER=mysql

RUN apk update && apk add --no-cache mariadb mariadb-client

RUN mkdir -p /var/log/${APP_USER}

RUN mkdir -p /var/run/mysqld && \
    chown -R ${APP_USER}:${APP_USER} /var/run/mysqld && \
    chmod -R 750 /var/run/mysqld

RUN mkdir -p /var/lib/${APP_USER} && \
    chown -R ${APP_USER}:${APP_USER} /var/lib/${APP_USER} && \
    chmod -R 750 /var/lib/${APP_USER} && \
    mkdir -p /var/run/${APP_USER} && \
    chown -R ${APP_USER}:${APP_USER} /var/run/${APP_USER} && \
    chmod -R 750 /var/run/${APP_USER} && \
    chown -R ${APP_USER}:${APP_USER} /var/log/${APP_USER} && \
    chmod -R 750 /var/log/${APP_USER}

COPY ./conf/my.cnf /etc/${APP_USER}/my.cnf

COPY ./tools/init.sql /docker-entrypoint-initdb.d/init.sql

EXPOSE 3306

USER ${APP_USER}:${APP_USER}

CMD ["mysqld_safe"]

下面是my.cnf文件:

[mysqld]
datadir=/var/lib/mysql
socket=/var/run/mysqld/mysqld.sock

log-error=/var/log/mysql/error.log

# Security
skip-networking

下面是创建admin用户并为root用户设置密码的脚本:

CREATE USER ${ADMIN_USERNAME}@'localhost' IDENTIFIED BY ${ADMIN_PASSWORD};
GRANT ALL PRIVILEGES ON ${MARIADB_DB_NAME}.* TO ${ADMIN_USERNAME}@'localhost' IDENTIFIED BY ${ADMIN_PASSWORD};
ALTER USER 'root'@'localhost' IDENTIFIED BY ${ROOT_PASSWORD};
FLUSH PRIVILEGES;

CREATE DATABASE wordpress;

我检查了我的容器的退出状态,状态为0,似乎一切正常,但我的容器在使用docker run命令启动时立即停止。
下面是使用的命令:

sudo docker run -d --name mariadb-container -p 3000:3306 mariadb-try:v1

这是 Docker 的日志

230611 19:52:59 mysqld_safe Logging to '/var/log/mysql/error.log'.
230611 19:52:59 mysqld_safe Starting mariadbd daemon with databases from /var/lib/mysql
ycggw6v2

ycggw6v21#

您可以运行控制台并将其附加到容器,然后从那里启动mysqld_safe

运行

这个命令将sh控制台附加到容器上,阻止它退出(这并不能解决您的问题……)
docker run -it -d --name mariadb-container --rm -p 3000:3306 mariadb-try:v1 sh

绑定

这将附加另一个 * 交互式 * 控制台,从那里您可以在系统上浏览它。
docker exec -it mariadb-container sh

启动MariaDB

在容器控制台中运行mysqld_safe
这将产生与您的问题中相同的输出

230612 15:01:43 mysqld_safe Logging to '/var/log/mysql/error.log'.
230612 15:01:43 mysqld_safe Starting mariadbd daemon with databases from /var/lib/mysql

调查

现在可以从/var/log/mysql/error.log读取错误日志

2023-06-12 15:01:44 0 [Note] Starting MariaDB 10.11.4-MariaDB source revision 4e2b93dffef2414a11ca5edc8d215f57ee5010e5 as process 95
2023-06-12 15:01:44 0 [Note] InnoDB: The first data file './ibdata1' did not exist. A new tablespace will be created!
2023-06-12 15:01:44 0 [Note] InnoDB: Compressed tables use zlib 1.2.13
2023-06-12 15:01:44 0 [Note] InnoDB: Using transactional memory
2023-06-12 15:01:44 0 [Note] InnoDB: Number of transaction pools: 1
2023-06-12 15:01:44 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
2023-06-12 15:01:44 0 [Note] mariadbd: O_TMPFILE is not supported on /var/tmp (disabling future attempts)
2023-06-12 15:01:44 0 [Note] InnoDB: Using Linux native AIO
2023-06-12 15:01:44 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
2023-06-12 15:01:44 0 [Note] InnoDB: Completed initialization of buffer pool
2023-06-12 15:01:44 0 [Note] InnoDB: Setting file './ibdata1' size to 12.000MiB. Physically writing the file full; Please wait ...
2023-06-12 15:01:44 0 [Note] InnoDB: File './ibdata1' size is now 12.000MiB.
2023-06-12 15:01:44 0 [Note] InnoDB: Buffered log writes (block size=512 bytes)
2023-06-12 15:01:44 0 [Note] InnoDB: Doublewrite buffer not found: creating new
2023-06-12 15:01:44 0 [Note] InnoDB: 128 rollback segments are active.
2023-06-12 15:01:44 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
2023-06-12 15:01:44 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
2023-06-12 15:01:44 0 [Note] InnoDB: log sequence number 0; transaction id 3
2023-06-12 15:01:44 0 [Note] Plugin 'FEEDBACK' is disabled.
2023-06-12 15:01:44 0 [ERROR] Could not open mysql.plugin table: "Table 'mysql.plugin' doesn't exist". Some plugins may be not loaded
2023-06-12 15:01:44 0 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
2023-06-12 15:01:44 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.db' doesn't exist
2023-06-12 15:01:44 0 [ERROR] Aborting
Warning: Memory not freed: 280

正确

现在你有了true错误,你可以在机器内部解决这个错误,而不需要重建镜像(并注意在Dockerfile上复制所需的步骤),然后重试启动MySQL。

相关问题