Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在docker创建后运行多个命令_Docker - Fatal编程技术网

在docker创建后运行多个命令

在docker创建后运行多个命令,docker,Docker,我想让脚本在Docker容器中运行一系列命令,然后复制一个文件。如果我使用docker run来执行此操作,我不会返回容器ID,这是docker cp需要的。(我可以尝试从docker ps中破解出来,但这似乎有风险。) 看来我应该可以 使用docker Create(返回容器ID)创建容器 运行命令 把文件复制出来 但我不知道如何进入第二步。工作docker exec仅适用于运行的容器…您真正需要的是Dockerfile然后从中构建映像,并使用新构建的映像运行容器。有关更多信息,请参阅 do

我想让脚本在Docker容器中运行一系列命令,然后复制一个文件。如果我使用
docker run
来执行此操作,我不会返回容器ID,这是
docker cp
需要的。(我可以尝试从docker ps中破解出来,但这似乎有风险。)

看来我应该可以

  • 使用
    docker Create
    (返回容器ID)创建容器
  • 运行命令
  • 把文件复制出来

  • 但我不知道如何进入第二步。工作
    docker exec
    仅适用于运行的容器…

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

    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
    

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

    例如—

  • 使用名称创建容器--name使用
    docker run
    -

    $docker run--name bang-dit alpine

  • 使用
    exec
    -

    $docker exec-it bang sh-c“ls-l”

  • 使用docker cp复制文件

    $docker cp bang:/etc/hosts./

  • 使用
    docker Stop
    -

    $docker stop bang


  • 我没有任何问题建立我的形象或运行它。问题是获取容器ID。您可以在手动运行docker之前为容器指定一个名称--name Compassociate_darwin nginx,并使用在docker cp
    Compassociate_darwin:/tmp/foo/myfile.txt上指定的名称,而不是使用docker容器ID。这是我错过的
    --name