簡體   English   中英

Docker 容器:/bin/sh:cat:沒有這樣的文件或目錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM