%20%E6%96%87%E4%BB%B6.png)
這是我的 Dockerfile:
FROM alpine
RUN apk add --update --upgrade --no-cache mysql mysql-client
RUN rm -rf /etc/my.cnf /etc/mysql/* /etc/mysql.d/ && \
mkdir -p /var/lib/mysql /var/run/mysqld && \
chown -R mysql /var/lib/mysql /run/mysqld && \
chgrp -R mysql /var/lib/mysql /run/mysqld && \
mysql_install_db --user=mysql --ldata=/var
EXPOSE 3306
USER mysql
CMD ["sh", "mysqld_safe --data=/var"]
我的問題是,當我運行帶有圖像的容器時,它找不到mysqld_safe
。但是當我像這樣手動運行命令時:docker run mysql mysqld_safe --data=/var
它有效!我嘗試使用以下命令更改 dockerfile:
CMD ["sh", "cat -"]
看看問題是否出在mysqld_safe
命令上,但這裡也有同樣的問題,除非cat
我使用docker run mysql cat -
.
問題是來自busybox
alpine 還是來自 PATH ?我現在不知道,我需要你的幫助。
答案1
您缺少告訴它解析/運行 shell 的下一個參數的-c
標誌。sh
如果沒有這個,我相信它正在尋找一個具有mysqld_safe --data=/var
要運行的名稱的腳本,這不是mysqld_safe
帶有 arg 的腳本--data=/var
,而是目錄名稱中帶有空格、破折號和等號的腳本名稱。相反,你想要:
CMD ["sh", "-c", "mysqld_safe --data=/var"]