Docker

CMD 時找不到 Docker (alpine) 文件

  • December 16, 2020

所以這是我的 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 -.

問題是來自busyboxalpine 還是來自 PATH ?我現在不知道,我需要你的幫助。

你錯過了告訴它解析/執行 shell 的下一個參數的-c標誌。sh沒有它,我相信它正在尋找一個名稱mysqld_safe --data=/var為要執行的腳本,這不是mysqld_safe帶有 arg的腳本--data=/var,而是目錄名稱中帶有空格、破折號和等號的單個腳本名稱。相反,你想要:

CMD ["sh", "-c", "mysqld_safe --data=/var"]

引用自:https://serverfault.com/questions/1046222