rag*_*hav 3 docker dockerfile docker-compose
我正在尝试在我的 docker 容器中运行 shell 脚本作为入口点。为此,我在 Dockerfile 中定义了一个入口点,如下所示
abc.Dockerfile
FROM ubuntu
COPY abc.sh /
RUN chmod +x /abc.sh
ENTRYPOINT /abc.sh
Run Code Online (Sandbox Code Playgroud)
Dockerfile 已成功构建,但在exec容器中执行时出现错误:
$ docker exec -it drupaldocker_myapp_1 bash
Error response from daemon: Container ca32bafe2247e51d5e9b1a8f0cf83457ccecb29e8ff9747a8c98aa6a046b0550 is restarting, wait until the container is running
Run Code Online (Sandbox Code Playgroud)
docker ps的输出:
Raghav-Macbook:iflychat-server-development-system raghav$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca32bafe2247 drupaldocker_myapp "/bin/sh -c \"/abc.sh\"" 9 minutes ago Restarting (0) 2 minutes ago drupaldocker_myapp_1
Run Code Online (Sandbox Code Playgroud)
我的docker-compose.yml看起来像
version: '2'
services:
myapp:
build:
context: .
dockerfile: abc.Dockerfile
restart: always
tty: true
Run Code Online (Sandbox Code Playgroud)
abc.sh
#!bin/sh
ls
cat /abc.sh
Run Code Online (Sandbox Code Playgroud)
另外,docker-compose up没有给我任何错误。输出看起来像
Raghav-Macbook:drupal-docker raghav$ docker-compose up
Recreating drupaldocker_myapp_1
Attaching to drupaldocker_myapp_1
myapp_1 | oot etc lib media opt root sbin sys usr
myapp_1 | bin dev home lib64 mnt proc run srv tmp var
myapp_1 | #!bin/sh
myapp_1 |
myapp_1 | ls
Run Code Online (Sandbox Code Playgroud)
我应该做哪些改变才能使这项工作发挥作用?
编辑
输出docker logs drupaldocker_myapp_1
abc.sh boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
#!bin/sh
ls
cat /abc.shabc.sh boot etc lib media opt root sbin sys usr
bin dev home lib64 mnt proc run srv tmp var
#!bin/sh
ls
cat /abc.sh
Run Code Online (Sandbox Code Playgroud)
编辑2
执行入口点脚本后容器是否会停止?
我认为你想要的是 docker run 而不是 docker exec 命令。Docker exec 是在已经部署并运行的容器上启动一些东西......而你想要的是在部署后启动一个脚本。
修改您的 Dockerfile。使用它代替最后一行的入口点:
CMD ["bash", "-c", "/abc.sh"]
Run Code Online (Sandbox Code Playgroud)
使用此命令运行它,脚本将自动启动:
docker run -it drupaldocker_myapp_1
Run Code Online (Sandbox Code Playgroud)
如果您将其放在bashdocker run 命令的末尾,您将在容器内获得一个交互式 bash 控制台,但会避免自动启动脚本:
docker run -it drupaldocker_myapp_1 bash
Run Code Online (Sandbox Code Playgroud)
回答您的问题“执行入口点脚本后容器是否会停止?” 答案是肯定的。如果执行了入口点脚本并且没有任何其他要执行的内容,则容器将停止,因为它没有更多的事情可做。如果您希望容器保持正常运行,您应该在其中运行一些没有立即结束的内容,例如脚本。
希望能帮助到你。
| 归档时间: |
|
| 查看次数: |
3910 次 |
| 最近记录: |