我有一个关于我的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
1条答案
按热度按时间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
这将产生与您的问题中相同的输出
调查
现在可以从
/var/log/mysql/error.log
读取错误日志正确
现在你有了true错误,你可以在机器内部解决这个错误,而不需要重建镜像(并注意在Dockerfile上复制所需的步骤),然后重试启动MySQL。