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