如何编写 dockerfile 来执行简单的 bash 脚本?

Tak*_*oUp 5 docker dockerfile

我正在尝试编写一个 docker 镜像来通过 netcat 运行一个简单的网络服务器。

所以我在我的 docker build 文件夹中有:

Dockerfile
index.html
run_netcat_webserver.sh
Run Code Online (Sandbox Code Playgroud)

run_netcat_webserver.sh非常简单,而且工作正常:

Dockerfile
index.html
run_netcat_webserver.sh
Run Code Online (Sandbox Code Playgroud)

这是我的天真的 Dockerfile,当然它不起作用:

FROM ubuntu:14.04

CMD run_netcat_webserver.sh
Run Code Online (Sandbox Code Playgroud)

我应该如何继续在 docker 容器中进行这项工作?

zeg*_*jan 6

您需要使脚本成为容器的一部分。为此,您需要使用COPYDocker 文件中的命令复制其中的脚本,例如像这样

FROM ubuntu:14.04
COPY run_netcat_webserver.sh /some/path/run_netcat_webserver.sh
CMD /some/path/run_netcat_webserver.sh
Run Code Online (Sandbox Code Playgroud)

/some/path是您容器选择的路径。由于您不需要非常关心容器内的用户,因此它甚至可以只是/.

另一种选择是通过安装的卷从外部提供脚本。例子:

FROM ubuntu:14.04
VOLUME /scripts
CMD /scripts/run_netcat_webserver.sh
Run Code Online (Sandbox Code Playgroud)

然后,当你运行容器时,你指定哪个目录将被挂载为/scripts. 假设您的脚本在 中/tmp,然后您将容器运行为

docker run --volume=/tmp:/scripts (rest of the command options and arguments)
Run Code Online (Sandbox Code Playgroud)

这将导致您的(主机)目录/tmp安装在/scripts容器目录下。