我试图在我的docker容器中运行shell脚本作为入口点。为此,我在Dockerfile中定义了一个像这样的
的入口点abc.Dockerfile
sed
Dockerfile成功构建,但在with open(tmp_path) as f, open(out_path, 'w') as outfile:
for line in f.readlines():
if not line.strip():
continue
if line:
outfile.write(line)
进入容器时我收到错误:
FROM ubuntu
COPY abc.sh /
RUN chmod +x /abc.sh
ENTRYPOINT /abc.sh
docker ps的输出:
exec
我的 docker-compose.yml 看起来像
$ docker exec -it drupaldocker_myapp_1 bash
Error response from daemon: Container ca32bafe2247e51d5e9b1a8f0cf83457ccecb29e8ff9747a8c98aa6a046b0550 is restarting, wait until the container is running
abc.sh
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
此外,version: '2'
services:
myapp:
build:
context: .
dockerfile: abc.Dockerfile
restart: always
tty: true
没有给我任何错误。输出看起来像
#!bin/sh
ls
cat /abc.sh
我应该做些什么改变来完成这项工作?
修改
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
编辑2
执行入口点脚本后容器是否会停止?
答案 0 :(得分:2)
我认为你想要的是docker run而不是docker exec命令。 Docker exec是在已经部署的正在运行的容器上启动某个东西......你想要的是在部署后启动一个脚本。
修改您的Dockerfile。在最后一行使用此代替入口点:
CMD ["bash", "-c", "/abc.sh"]
使用此命令运行它,脚本将自动启动:
docker run -it drupaldocker_myapp_1
如果你将bash
放在docker run命令的末尾,你将在容器内部获得一个交互式bash控制台,但是避免了自动脚本启动:
docker run -it drupaldocker_myapp_1 bash
回答您的问题“执行入口点脚本后容器是否会停止?”答案是肯定的。如果执行入口点脚本并且没有其他任何内容要执行,则容器会停止,因为它没有其他任何操作。如果你想让一个容器保持运行,你应该在它内部运行一些没有像脚本那样立即结束的东西。
希望它有所帮助。