[英]Docker container: /bin/sh: cat: No such file or directory
我正在使用 mysql/mysql-server 映像在 docker 中創建 mysql 服務器。 因為我想自動設置我的數據庫(添加用戶、創建表),所以我創建了一個 SQL 文件來為我做這件事。 為了自動運行該腳本,我用這個 dockerfile 擴展了圖像:
FROM mysql/mysql-server:latest
RUN mkdir /scripts
WORKDIR /scripts
COPY ./db_setup.sql .
RUN mysql -u root -p password < cat db_setup.sql
但由於某種原因,會發生這種情況:
/bin/sh: cat: No such file or directory
ERROR: Service 'db' failed to build : The command '/bin/sh -c mysql -u root -p password < cat db_setup.sql' returned a non-zero code: 1
我該如何解決?
您可以從RUN
命令中刪除cat
命令:
RUN mysql -u root -p password < db_setup.sql
由於在 WORKDIR 設置的當前目錄中找不到cat
,因此不會返回No such file or directory
。 您可以將 mysql 的標准輸入重定向到 db_setup.sql 文件中。 編輯澄清<
sh 重定向期望文件名用於輸入。
編輯 2:請記住,您的示例是一個RUN命令,它試圖運行mysql
並在 docker image build time創建一個層。 您可能希望在運行時的 mysql 入口點腳本期間運行此程序(例如, 腳本由官方 mysql 映像的docker-entrypoint.sh腳本從docker-entrypoint-initdb.d/
目錄運行)或使用其他功能記錄為官方圖像。
RUN
是構建時間命令。 MySQL 此時未運行。
如果您在哪里/正在使用標准圖像,則有一個用於數據庫初始化的位置:
FROM mysql:8.0
COPY db_setup.sql /docker-entrypoint-initdb.d
命令 cat 不存在於 mysql/mysql-server:latest 映像中。
此外,您只需要提供文件名 afetr 重定向。
運行 mysql -u root -p 密碼 < db_setup.sql
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.