我正在尝试创建新的MySQL镜像并在Kubernetes中部署。
FROM oraclelinux:7-slim
USER root
ARG MYSQL_SERVER_PACKAGE=mysql-community-server-minimal-8.0.19
ARG MYSQL_SHELL_PACKAGE=mysql-shell-8.0.19
# Install server
RUN yum install -y https://repo.mysql.com/mysql-community-minimal-release-el7.rpm \
https://repo.mysql.com/mysql-community-release-el7.rpm \
&& yum-config-manager --enable mysql80-server-minimal \
&& yum install -y \
$MYSQL_SERVER_PACKAGE \
$MYSQL_SHELL_PACKAGE \
libpwquality \
&& yum clean all \
&& mkdir /docker-entrypoint-initdb.d
VOLUME /var/lib/mysql
COPY docker-entrypoint.sh /entrypoint.sh
COPY healthcheck.sh /healthcheck.sh
ENTRYPOINT ["/entrypoint.sh"]
HEALTHCHECK CMD /healthcheck.sh
EXPOSE 3306 33060
RUN chmod +rwx /entrypoint.sh
RUN chmod +rwx /healthcheck.sh
RUN groupadd -r mysql && useradd -r -g mysql mysql
EXPOSE 3306
CMD ["mysqld"]
在容器中正常工作,但是在Kubernetes部署时会报以下错误:
我该如何理解这个问题?
添加内容:
docker-entrypoint.sh:
if [ -n "$MYSQL_LOG_CONSOLE" ] || [ -n "console" ]; then
# Don't touch bind-mounted config files
if ! cat /proc/1/mounts | grep "/etc/my.cnf"; then
sed -i 's/^log-error=/#&/' /etc/my.cnf
fi
fi
附言:我已经添加了文件的内容。
entrypoint.sh
脚本的内容吗?显然它使用sed
执行一些操作,但为什么会有临时文件保存到/etc
目录中呢?有很多更好的位置可以用,比如/tmp
,这样就不需要特权升级了。 - mariokubernetes
这个词,这意味着你正在 kubernetes 中运行该 docker 镜像,很可能要么挂载了/etc
卷,要么使用了securityContext:
切换了容器运行的用户(很可能是你Dockerfile
中显示的mysql
用户)。为了得到答案,你需要包含这些相关细节。 - mdaniel