运行 docker 容器中的 shell 脚本

Running a shell script in docker container

世界人民,您好!

我正在进入容器化,docker我正在尝试创建一些基本容器。 我 运行宁 Docker Windows。

我想创建一个容器,其中 运行 是一个带有 curl 命令的 shell 脚本。我在 docker 上找到了一张内置卷曲的图片。

我在 windows 中的目录结构看起来像
Curl_container(文件夹)
Docker文件(文件)
curl_registry.sh(文件)

curl_registry.sh代码是

#!/bin/bash
    
while :
do
HOSTNAME=$(hostname)
DATE=$(date +'%Y-%m-%d')
TIME=$(date +'%Y/%m/%d %X')

CURL_RESULT=`http://www.google.com | head -1`
    
echo $TIME  $HOSTNAME  $CURL_RESULT

sleep 5
done
exit

我的 Docker 文件看起来像这样

FROM eamonwoortman/alpine-python-curl-zip
MAINTAINER red_badger@burrow.uk
WORKDIR /
COPY . /
RUN ["chmod", "+x","curl_registry.sh"]
ENTRYPOINT [ "./curl_registry.sh" ]

我能够构建容器;

PS C:\temp\Docker\Curl_container> docker build -t curl_container:1.18 .
[+] Building 1.0s (8/8) FINISHED
 => [internal] load build definition from Dockerfile  0.0s
 => transferring dockerfile: 238B                     0.0s
 => [internal] load .dockerignore                     0.0s
 => [internal] load metadata for docker.io/eamonwoortman/alpine-python-curl-zip:latest               0.0s
 => CACHED [1/4] FROM docker.io/eamonwoortman/alpine-python-curl-zip                                 0.0s
 => [2/4] COPY . /                                                                                   0.1s
 => [3/4] RUN ["chmod", "+x","curl_registry.sh"]                                                         
 => writing image sha256:497b03c55d8e90e7eff43c8868e420498516477b9225ad6d3bdf0076ebe9d9ed         0.0s
 => naming to docker.io/library/curl_container:1.18                                               0.0s

但是当我 运行 它时,我得到以下错误

PS C:\temp\Docker\Curl_container> docker run 497b03c55d8e
standard_init_linux.go:228: exec user process caused: no such file or directory
我想将脚本 运行ning 放在文件夹 /apps 中,但我认为这是我的问题,因此尝试将文件放入根目录。 我已经尝试用 ADD 命令代替 COPY,但我得到了相同的结果。 curl_registry.sh 在 windows.

中显示为 .sh 文件

我有 运行 我的 sh 文件通过记事本++转换为 unix LF。

在容器内使用bash和运行命令,解决出现的错误,然后当命令运行时,可以将这些命令添加到docker文件。

sudo docker exec -it (container name) /bin/bash

默认情况下,您是 docker 容器中的根用户。

您的 alpine 图像没有 bash 解释器。您需要将您的解释器更改为 ash 并修复您的 curl 命令

#!/bin/ash
    
while :
do
HOSTNAME=$(hostname)
DATE=$(date +'%Y-%m-%d')
TIME=$(date +'%Y/%m/%d %X')

CURL_RESULT=`curl -s -N http://www.google.com | head -1`
    
echo $TIME  $HOSTNAME  $CURL_RESULT

sleep 5
done
exit