是什么之间的差异COPY
,并ADD
在Dockerfile命令,当我将使用一个比其他?
COPY <src> <dest>
Run Code Online (Sandbox Code Playgroud)
COPY指令将从
<src>
路径中复制新文件并将其添加到容器的文件系统中<dest>
ADD <src> <dest>
Run Code Online (Sandbox Code Playgroud)
ADD指令将从
<src>
路径中复制新文件并将其添加到容器的文件系统中<dest>
.
sheller RUN和CMD语句的shell形式和exec形式之间有什么区别.
例如:
RUN [ "npm", "start" ]
Run Code Online (Sandbox Code Playgroud)
VS:
RUN npm start
Run Code Online (Sandbox Code Playgroud)
eg2:
CMD ["python","my_script.py","argument"]
Run Code Online (Sandbox Code Playgroud)
VS:
CMD python my_script.py argument
Run Code Online (Sandbox Code Playgroud) 根据Docker文档:Dockerfile中只能有一条CMD指令.如果列出多个CMD,则只有最后一个CMD才会生效.
我希望在CMD命令(在我的情况下是init)之前执行一个简单的bash脚本(处理docker环境变量).
有没有办法做到这一点?
我正在从另一个设置特定入口点的图像创建图像.但是我希望我的图像具有默认图像.如何重置ENTRYPOINT?
我尝试了以下Dockerfile:
FROM some-image
ENTRYPOINT ["/bin/sh", "-c"]
Run Code Online (Sandbox Code Playgroud)
不幸的是,它不像默认入口点那样工作,因为它需要引用命令.
docker run myimage ls -l / # "-l /" arguments are ignored
file1 file2 file3 # files in current working directory
docker run myimage "ls -l /" # works correctly
Run Code Online (Sandbox Code Playgroud)
如何在不引用的情况下使用命令?
假设一个docker容器已经使用'docker run'运行,然后使用'docker stop'停止."码头开始"后是否会执行"CMD"命令?
我用python脚本创建了一个docker容器.python脚本接受输入文件,进行一些处理并将输出文件保存在某个指定位置.
docker run /app/script.py --input /data/input.csv --output /data/output.csv
Run Code Online (Sandbox Code Playgroud)
由于每次运行脚本时输入文件都可能不同,我希望它在docker容器之外.我还想将输出存储在容器外的某个地方.
docker run /app/script.py --input /my/local/location/outside/docker/input.csv --output /my/local/location/outside/docker/output.csv
Run Code Online (Sandbox Code Playgroud)
docker支持这个吗?如果是这样,人们将如何实现它?
我Dockerfile
看起来如下:
FROM phusion/baseimage
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y python-dev
RUN apt-get install -y python-pip
RUN apt-get install -y python-numpy && \
apt-get install -y python-scipy
COPY ./requirements.txt /app/requirements.txt
COPY ./src/script.py /app/script.py
WORKDIR /app
COPY . /app
Run Code Online (Sandbox Code Playgroud) 我有一个简单的 spring-boot 项目:
-resources
-application.yaml
-application-test.yaml
Run Code Online (Sandbox Code Playgroud)
我有这个Dockerfile
:
FROM openjdk:8-jdk-alpine
EXPOSE 8080
ADD micro-boot.jar micro-boot.jar
ENTRYPOINT ["java","-Dspring.profiles.active=test" "-jar","/micro-boot.jar"]
Run Code Online (Sandbox Code Playgroud)
1)我建立形象 - C:\micro-boot>docker build -f Dockerfile -t micro-boot .
2)显示所有图像 - C:\micro-boot>docker image ls -a
micro-boot latest ccc9a75ebc24 4 seconds ago 112MB
Run Code Online (Sandbox Code Playgroud)
3)尝试开始 C:\micro-boot>docker image ls -a
我收到一个错误:
/bin/sh: [java,-Dspring.profiles.active=test: not found
Run Code Online (Sandbox Code Playgroud) 我想了解CMD和ENTRYPOINT的工作原理。所以,我刚刚创建了一个非常简单的Dockerfile
FROM scratch
CMD echo "Hello First"
ENTRYPOINT echo "Hello second"
Run Code Online (Sandbox Code Playgroud)
然后我建立这个形象:
docker build -t my_image .
Run Code Online (Sandbox Code Playgroud)
日志如下:
步骤1/3:从头开始--->步骤2/3:CMD回显“ Hello First” --->使用缓存---> 9f2b6a00982f步骤3/3:ENTRYPOINT回显“ Hello first” --->使用缓存---> 1bbe520f9526已成功构建1bbe520f9526已成功标记my_image:latest安全警告:您正在针对非Windows Docker主机从Windows构建Docker映像。添加到构建上下文的所有文件和目录都将具有“ -rwxr-xr-x”权限。建议仔细检查并重置敏感文件和目录的权限。
当我创建此图像的容器时,它返回:
docker run my_image
Run Code Online (Sandbox Code Playgroud)
错误是:
泊坞窗:来自守护程序的错误响应:OCI运行时创建失败:container_linux.go:344:启动容器进程导致“ exec:\” / bin / sh \”:stat / b in / sh:无此类文件或目录”:未知。
有人可以帮我解决错误吗?
我一直在使用Docker for Windows,尝试创建一个可以在容器内运行cygwin作为shell的Windows容器.我还没有运气好.这是我一直在搞乱的Dockerfile.
# escape=`
FROM microsoft/windowsservercore
SHELL ["powershell", "-command"]
RUN Invoke-WebRequest https://chocolatey.org/install.ps1 -UseBasicParsing | Invoke-Expression
RUN choco install cygwin -y
RUN refreshenv
RUN [Environment]::SetEnvironmentVariable('Path', $env:Path + ';C:\tools\cygwin\bin', [EnvironmentVariableTarget]::Machine)
Run Code Online (Sandbox Code Playgroud)
我已经尝试设置ENTRYPOINT和CMD试图进入cygwin,但似乎都没有做任何事情.我还附加了容器docker run -it
并启动了cygwin命令进入shell,但它似乎没有做任何事情.我没有收到错误,它只是返回到命令提示符,好像什么也没发生.
是否可以在Windows容器中运行另一个shell,或者我只是做错了什么?
谢谢!
我发现在使用时docker run
我有时不需要添加"命令",而有时候"命令"是必须的.例如,在运行ubuntu
映像时,不需要命令:
# docker run ubuntu
#
Run Code Online (Sandbox Code Playgroud)
在运行时mstormo/suse
:
# docker run mstormo/suse
Error response from daemon: No command specified
# docker run mstormo/suse bash
#
Run Code Online (Sandbox Code Playgroud)
那么这与指定的图像有关吗?