我有一个 Dockerfile,我在其中复制了一个名为 myscript.sh
的 shell 脚本,我想在每次从映像制作的容器启动时运行该脚本。脚本可以正常复制,但不会在容器启动时执行。容器启动后,我可以交互连接并手动运行脚本,没有问题,但它不会在启动时运行。
myscript.sh
的内容:
#!/bin/bash
mkdir -p /root/newfolder
Dockerfile:
FROM ubuntu:20.04
COPY ./src* /src
COPY ./myscript.sh /usr/local/bin
CMD ["/usr/local/bin/myscript.sh"]
我也试过:
CMD ["/bin/bash", "/usr/local/bin/myscript.sh"]
当我运行 docker run -it -d --name {container_name} {image_name} bash
时,它会从图像创建一个容器并给我 shell 提示。我检查脚本是否创建了文件夹,但没有创建。如果我然后以交互方式运行脚本,则创建的文件夹没有问题。
我查看了其他解决方案,但似乎都不起作用。我错过了什么?
答案 0 :(得分:0)
您调用 docker run 命令的方式意味着您已经覆盖了图像中指定的默认 CMD
$ docker run --help
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
您可以在您使用的语法中看到,为可选的 bash
参数提供了 [COMMAND]
。如果省略此参数,您应该会看到您的命令确实在容器中运行。
但是,如果之后您想放入容器中的交互式 shell,那么您应该将 CMD
指令替换为 RUN
指令,然后将 bash
作为命令传递。