我正在尝试编写一个docker镜像,通过netcat运行一个简单的Web服务器。
所以我在我的docker build文件夹中:
Dockerfile
index.html
run_netcat_webserver.sh
run_netcat_webserver.sh
很简单,工作正常:
#!/bin/bash
while true ; do nc -l 8080 < index.html ; done
这是我天真的Dockerfile,当然不能正常工作:
FROM ubuntu:14.04
CMD run_netcat_webserver.sh
我应该如何在Docker容器中进行此工作?
答案 0 :(得分:3)
您需要将脚本作为容器的一部分。为此,您需要使用Docker文件中的COPY
命令复制内部脚本,例如:像这样
FROM ubuntu:14.04
COPY run_netcat_webserver.sh /some/path/run_netcat_webserver.sh
CMD /some/path/run_netcat_webserver.sh
/some/path
是您选择 容器内的路径。由于您不需要太在意容器内的用户,因此它甚至可以只是/
。
另一种选择是通过安装的卷在外部提供脚本。例如:
FROM ubuntu:14.04
VOLUME /scripts
CMD /scripts/run_netcat_webserver.sh
然后,当您运行容器时,指定将挂载的目录为/scripts
。假设您的脚本位于/tmp
,然后您将容器作为
docker run --volume=/tmp:/scripts (rest of the command options and arguments)
这会导致您的(主机)目录/tmp
挂载在容器的/scripts
目录下。
答案 1 :(得分:1)
简单示例
FROM ubuntu:14.04 - #image用于构建容器
ENTRYPOINT [&#34; / bin / echo&#34;] - 在启动容器时执行的#命令
确认您与&#34; Dockerfile&#34;位于同一目录中。
sudo docker build。
你完成了
示例输出:
ahanjura @ ubuntu:〜$ vi Dockerfile
ahanjura @ ubuntu:〜$ sudo docker build。
将构建上下文发送到Docker守护程序1.39 GB 第1步:从ubuntu:14.04 ---&GT; 67759a80360c 第2步:ENTRYPOINT / bin / echo ---&GT;在c0e5f48f7d45中运行 ---&GT; 7a96b36f528e 删除中间容器c0e5f48f7d45 成功建造了7a96b36f528e