如何在不使用 -it 的情况下触发 docker 运行 命令时 运行 bash?
How to run the bash when we trigger docker run command without -it?
我有一个 Dockerfile 如下:
FROM centos
RUN mkdir work
RUN yum install -y python3 java-1.8.0-openjdk java-1.8.0-openjdk-devel tar git wget zip
RUN pip install pandas
RUN pip install boto3
RUN pip install pynt
WORKDIR ./work
CMD ["bash"]
我正在安装一些基本的依赖项。
现在当我 运行
docker run imagename
除了我 运行
它什么都不做
docker run -it imageName
我登陆 bash shell。但是我想在触发 运行 命令后立即进入 bash shell,无需任何额外参数。
我在 AWS codebuild 中使用这个 docker 容器,在那里我不能指定任何参数,比如 -it 但我想在 docker 容器本身中执行我的代码。
是否可以修改 CMD/ENTRYPOINT,使 运行 处理 docker 图像时,我正好落在容器内?
我检查了您的容器,由于缺少 pip
,它甚至无法构建。所以我稍微修改了一下,让它至少可以构建:
FROM centos
RUN mkdir glue
RUN yum install -y python3 java-1.8.0-openjdk java-1.8.0-openjdk-devel tar git wget zip python3-pip
RUN pip3 install pandas
RUN pip3 install boto3
RUN pip3 install pynt
WORKDIR ./glue
构建它使用,例如:
docker build . -t glue
然后你可以在里面运行命令使用例如下面的语法:
docker run --rm glue bash -c "mkdir a; ls -a; pwd"
我使用 --rm
因为我不想保留容器。
希望对您有所帮助。
我们无法直接登录到 docker 容器。
如果您想在容器以分离模式启动时 运行 任何特定命令,您可以在 Dockerfile 的 CMD 和 ENTRYPOINT 命令中给出它。
如果想直接进入shell,可以运行
docker -it run imageName
或
docker run imageName bash -c "ls -ltr;pwd"
它将 return 输出。
如果你在没有 -it 参数的情况下触发了 运行 命令,那么你可以使用以下命令进入容器:
docker exec -it imageName
然后您将降落到 shell。
现在,如果您正在使用 AWS codebuild 自定义映像并且关心如何将命令提交到容器,那么您必须将命令放入 build_spec.yaml 文件并将命令放入 pre_build、build 或 post_build 参数,这些命令将被提交到 docker 容器。
-build_spec.yml
version: 0.2
phases:
pre_build:
commands:
- pip install boto3 #or any prebuild configuration
build:
commands:
- spark-submit job.py
post_build:
commands:
- rm -rf /tmp/*
更多关于 build_spec here
我有一个 Dockerfile 如下:
FROM centos
RUN mkdir work
RUN yum install -y python3 java-1.8.0-openjdk java-1.8.0-openjdk-devel tar git wget zip
RUN pip install pandas
RUN pip install boto3
RUN pip install pynt
WORKDIR ./work
CMD ["bash"]
我正在安装一些基本的依赖项。 现在当我 运行
docker run imagename
除了我 运行
它什么都不做docker run -it imageName
我登陆 bash shell。但是我想在触发 运行 命令后立即进入 bash shell,无需任何额外参数。
我在 AWS codebuild 中使用这个 docker 容器,在那里我不能指定任何参数,比如 -it 但我想在 docker 容器本身中执行我的代码。 是否可以修改 CMD/ENTRYPOINT,使 运行 处理 docker 图像时,我正好落在容器内?
我检查了您的容器,由于缺少 pip
,它甚至无法构建。所以我稍微修改了一下,让它至少可以构建:
FROM centos
RUN mkdir glue
RUN yum install -y python3 java-1.8.0-openjdk java-1.8.0-openjdk-devel tar git wget zip python3-pip
RUN pip3 install pandas
RUN pip3 install boto3
RUN pip3 install pynt
WORKDIR ./glue
构建它使用,例如:
docker build . -t glue
然后你可以在里面运行命令使用例如下面的语法:
docker run --rm glue bash -c "mkdir a; ls -a; pwd"
我使用 --rm
因为我不想保留容器。
希望对您有所帮助。
我们无法直接登录到 docker 容器。 如果您想在容器以分离模式启动时 运行 任何特定命令,您可以在 Dockerfile 的 CMD 和 ENTRYPOINT 命令中给出它。
如果想直接进入shell,可以运行
docker -it run imageName
或
docker run imageName bash -c "ls -ltr;pwd"
它将 return 输出。 如果你在没有 -it 参数的情况下触发了 运行 命令,那么你可以使用以下命令进入容器:
docker exec -it imageName
然后您将降落到 shell。
现在,如果您正在使用 AWS codebuild 自定义映像并且关心如何将命令提交到容器,那么您必须将命令放入 build_spec.yaml 文件并将命令放入 pre_build、build 或 post_build 参数,这些命令将被提交到 docker 容器。
-build_spec.yml
version: 0.2
phases:
pre_build:
commands:
- pip install boto3 #or any prebuild configuration
build:
commands:
- spark-submit job.py
post_build:
commands:
- rm -rf /tmp/*
更多关于 build_spec here