在docker create之后运行多个命令

时间:2018-01-17 09:44:38

标签: docker

我想让一个脚本在Docker容器中运行一系列命令,然后将文件复制出来。如果我使用docker run执行此操作,则无法取回容器ID,我需要docker cp。 (我可以尝试将其从docker ps中删除,但这似乎有风险。)

似乎我应该能够

  1. 使用docker create创建容器(返回容器ID)。
  2. 运行命令。
  3. 将文件复制出来。
  4. 但我不知道如何让第2步工作。 docker exec仅适用于运行容器......

2 个答案:

答案 0 :(得分:2)

如果我正确理解了您的问题,您只需要“run exec& cp” -

例如 -

  1. 使用--name -

    创建名称为docker run的容器

    $ docker run --name bang -dit alpine

  2. 使用exec -

    运行一些命令

    $ docker exec -it bang sh -c "ls -l"

  3. 使用docker cp -

    复制文件

    $ docker cp bang:/etc/hosts ./

  4. 使用docker stop -

    停止容器

    $ docker stop bang

答案 1 :(得分:1)

您真正需要的只是Dockerfile,然后从中构建图像并使用新构建的图像运行容器。有关更多信息,请参阅 this

A"标准" dockerfile的内容可能如下所示:

#Download base image ubuntu 16.04
FROM ubuntu:16.04

# Update Ubuntu Software repository
RUN apt-get update

# Install nginx, php-fpm and supervisord from ubuntu repository
RUN apt-get install -y nginx php7.0-fpm supervisor && \
rm -rf /var/lib/apt/lists/*

#Define the ENV variable
ENV nginx_vhost /etc/nginx/sites-available/default
ENV php_conf /etc/php/7.0/fpm/php.ini
ENV nginx_conf /etc/nginx/nginx.conf
ENV supervisor_conf /etc/supervisor/supervisord.conf

#Copy supervisor configuration
COPY supervisord.conf ${supervisor_conf}


# Configure Services and Port
COPY start.sh /start.sh
CMD ["./start.sh"]

EXPOSE 80 443