相关疑难解决方法(0)

Dockerfile中的`COPY`和`ADD`命令有什么区别?

是什么之间的差异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>.

docker dockerfile

1991
推荐指数
14
解决办法
61万
查看次数

Dockerfile CMD shell与exec表单

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

18
推荐指数
1
解决办法
9240
查看次数

在CMD之前执行脚本

根据Docker文档:Dockerfile中只能有一条CMD指令.如果列出多个CMD,则只有最后一个CMD才会生效.

我希望在CMD命令(在我的情况下是init)之前执行一个简单的bash脚本(处理docker环境变量).

有没有办法做到这一点?

environment-variables docker

17
推荐指数
2
解决办法
1万
查看次数

默认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)

如何在不引用的情况下使用命令?

sh docker

16
推荐指数
2
解决办法
1万
查看次数

'docker start'执行CMD命令吗?

假设一个docker容器已经使用'docker run'运行,然后使用'docker stop'停止."码头开始"后是否会执行"CMD"命令?

docker

15
推荐指数
2
解决办法
8412
查看次数

Docker输入/输出在容器外部

我用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)

python docker

15
推荐指数
1
解决办法
9650
查看次数

如何使用配置文件在 docker 中启动 spring boot 应用程序?

我有一个简单的 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)

java spring docker spring-boot dockerfile

15
推荐指数
2
解决办法
2万
查看次数

启动容器过程导致“ exec:\” / bin / sh \”:统计信息/ bin / sh:无此类文件或目录”:未知

我想了解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:无此类文件或目录”:未知。

有人可以帮我解决错误吗?

bash shell docker dockerfile

13
推荐指数
1
解决办法
7299
查看次数

无法在Windows Docker Container中运行cygwin

我一直在使用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,或者我只是做错了什么?

谢谢!

windows shell cygwin docker

12
推荐指数
1
解决办法
2062
查看次数

为什么一些docker镜像在运行时需要命令?

我发现在使用时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)

那么这与指定的图像有关吗?

docker

9
推荐指数
1
解决办法
9950
查看次数