これは私のスクリプトです。
#!/bin/bash
# some bash code here
これは私のものですDockerfile
:
FROM node:lts-bullseye-slim
COPY . .
RUN /Script.sh
私が得るエラーは次のとおりです。
Step 5/5 : RUN /Script.sh
---> Running in 09bbdebbc3d7
/Script.sh: line 25: syntax error: unexpected end of file
The command '/bin/sh -c /Script.sh' returned a non-zero code: 2
ただし、対話型モードでコンテナを実行し、docker exec -it container_name bash
スクリプトを使用して入力して実行すると機能します。
Dockersh
がbash
。
Dockerがshの代わりにbashを使用するように強制する方法は?
修正する
これは私の本当のスクリプトです。実際の名前はであり、BuildScript
拡張子はなく、ルートディレクトリにあり、777権限があります。
#!/bin/bash
function RemoveDevelopmentItems()
{
echo "Removing development items ..."
rm -rf ${RepositoryPath}/Host
}
function BuildDirectories()
{
echo "Building directories ..."
mkdir -p ${RepositoryPath}/src
mkdir -p ${RepositoryPath}/public
mkdir -p ${RepositoryPath}/public/favicons
mkdir -p ${RepositoryPath}/public/Fonts
mkdir -p ${RepositoryPath}/src/Base
mkdir -p ${RepositoryPath}/src/Contexts
mkdir -p ${RepositoryPath}/src/Components
mkdir -p ${RepositoryPath}/src/Hooks
mkdir -p ${RepositoryPath}/src/Panel
}
function CopyCommon()
{
echo "Copying common ..."
cp -a /${Organization}/Common/Branding/Favicons/* ${RepositoryPath}/public/favicons
cp -r /${Organization}/Common/Branding ${RepositoryPath}/src/Branding
cp -r /${Organization}/Common/Logo.jsx ${RepositoryPath}/src/Logo.jsx
}
function CopyBase()
{
echo "Copying base ..."
cp -r /HolismPanel/Infra/src/Base ${RepositoryPath}/src
cp -r /HolismPanel/Infra/src/Components ${RepositoryPath}/src
cp -r /HolismPanel/Infra/src/Contexts ${RepositoryPath}/src
cp -r /HolismPanel/Infra/src/Fonts ${RepositoryPath}/public
cp -r /HolismPanel/Infra/src/Hooks ${RepositoryPath}/src
cp -r /HolismPanel/Infra/src/Panel ${RepositoryPath}/src
cp /HolismPanel/Infra/index.html ${RepositoryPath}/index.html
cp /HolismPanel/Infra/package.json ${RepositoryPath}
cp /HolismPanel/Infra/postcss.config.js ${RepositoryPath}
cp /HolismPanel/Infra/src/index.css ${RepositoryPath}/src
cp /HolismPanel/Infra/src/main.jsx ${RepositoryPath}/src
cp /HolismPanel/Infra/tailwind.config.js ${RepositoryPath}
cp /HolismPanel/Infra/vite.config.js ${RepositoryPath}
}
function CopyDependencies()
{
echo "Copying dependencies ..."
find /HolismPanel -mindepth 1 -maxdepth 1 -not -name Infra |
while read DependencyPath;
do
DependencyName=$(basename $DependencyPath);
if [[ ${Repository} == *Admin* ]]; then
mkdir -p ${RepositoryPath}/src/$DependencyName
cp -a /HolismPanel/$DependencyName/Admin/* ${RepositoryPath}/src/$DependencyName
fi
done
}
function MoveMainRepoFiles()
{
echo "Moving main repo files ..."
mv ${RepositoryPath}/Menu.jsx ${RepositoryPath}/src/Menu.jsx
mv ${RepositoryPath}/Routes.jsx ${RepositoryPath}/src/Routes.jsx
mv ${RepositoryPath}/HeaderActions.jsx ${RepositoryPath}/src/HeaderActions.jsx
find ${RepositoryPath} -mindepth 1 -maxdepth 1 -type d -not -name src -not -name public |
while read MainRepoDirectory;
do
mv $MainRepoDirectory ${RepositoryPath}/src
done
}
function LinkNodeModules()
{
echo "Linking node_modules ..."
ln -s /HolismPanel/Infra/node_modules ${RepositoryPath}
}
RemoveDevelopmentItems
BuildDirectories
CopyCommon
CopyBase
CopyDependencies
MoveMainRepoFiles
LinkNodeModules
そして、拡張子を追加する必要があるか、777ファイルを作成しないでください、またはルートディレクトリで作業しないでください。ありがとうございます。
答え1
RUN /Script.sh
RUN
実行するコマンドのシェル形式です/bin/sh -c <command>
。スクリプトを直接実行するには、次を使用します。実装する配列形式を次のように変更しますRUN ["/Script.sh"]
。スクリプトが実行可能であることを確認してください(実行chmod +x Script.sh
)。また、ルートディレクトリを作業ディレクトリとして使用しないでください。