标签: dockerfile

Docker将warfile添加到官方Tomcat映像

我通过运行此命令为Tomcat提取了官方Docker镜像.

docker run -it --rm tomcat:8.0
Run Code Online (Sandbox Code Playgroud)

通过使用它作为基本图像,我需要在tomcat webapps文件夹中构建包含war文件的新图像.我像这样创建了Dockerfile.

From tomcat8
ADD warfile /usr/local/tomcat
Run Code Online (Sandbox Code Playgroud)

当我通过构建映像运行此Dockerfile时,我无法看到Tomcat首页.

任何人都可以告诉我如何将我的warfile添加到官方Tomcat图像webapp文件夹.

docker boot2docker dockerfile

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

Dockerfile:了解VOLUME指令

我们来举个例子吧.

以下是VOLUME该指令nginx的图像:

VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"]
Run Code Online (Sandbox Code Playgroud)

这是我的问题:

  1. 当您启动容器时,这些目录是否会显示在我的主机上?当我停止我的容器时,目录将保留?

  2. 如果我的主机中已存在某些(或所有)这些目录,会发生什么?例如,假设图像/etc/nginx在容器目录中附带了一个默认配置文件/etc/nginx,我的主机上也有一个配置文件.当容器启动时,哪些文件将获得优先权?

  3. -v /host/dir:container/dir和之间的关键区别是VOLUME什么?

参考文献:

docker dockerfile

22
推荐指数
1
解决办法
7897
查看次数

如何在具有正确组的docker容器中将docker socket作为卷安装

我想在docker容器中运行Jenkins实例.

我希望Jenkins本身能够将docker容器作为从属设备来运行测试.

似乎最好的方法是使用

docker run -v /var/run.docker.sock:/var/run/docker.sock -p 8080:8080 -ti my-jenkins-image
Run Code Online (Sandbox Code Playgroud)

资源

Dockerfile我使用的是

FROM jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt

USER root
RUN apt-get update && apt-get install -y docker.io
RUN usermod -aG docker jenkins
USER jenkins
Run Code Online (Sandbox Code Playgroud)

如果我在正在运行的容器中启动一个bash会话并运行docker info我的图像,我得到了

$ docker info
FATA[0000] Get http:///var/run/docker.sock/v1.18/info: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
Run Code Online (Sandbox Code Playgroud)

如果我以root身份运行bash会话

docker exec -u 0 -ti cocky_mccarthy bash
root@5dbd0efad2b0:/# docker info
Containers: 42
Images: …
Run Code Online (Sandbox Code Playgroud)

jenkins docker dockerfile jenkins-docker

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

在Dockerfile中安装`lightdm`会引发交互式键盘布局菜单

我有以下Dockerfile:

# Pull from CentOS RPM Build Image
FROM ubuntu

# Update the image
RUN apt-get update -y
RUN apt-get install lightdm -y
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是当我用这个容器构建时docker build -t dumbcontainer .,在某些时候我会得到一个用于选择键盘布局的交互式菜单:

Adding system user `lightdm' (UID 106) ...
Adding new user `lightdm' (UID 106) with group `lightdm' ...
Creating home directory `/var/lib/lightdm' ...
usermod: no changes
usermod: no changes
usermod: no changes
Adding group `nopasswdlogin' (GID 109) ...
Done.
Setting up libnih-dbus1:amd64 (1.0.3-4.3ubuntu1) ...
Setting up mountall (2.54ubuntu1) ...
Setting up …
Run Code Online (Sandbox Code Playgroud)

ubuntu interactive apt-get docker dockerfile

22
推荐指数
3
解决办法
5481
查看次数

无法在Docker容器中更新php.ini文件

我正试图用Nginx和PHP7在Docker上设置Magento2.

我已经按照PHP7 Docker镜像的建议添加了一个自定义的php.ini文件.我可以从phpinfo.php看到它正在加载我的php.ini文件,但我的更新都没有. 在此输入图像描述 在此输入图像描述 在此输入图像描述

它应该是:

memory_limit = 2G
max_execution_time = 800
Run Code Online (Sandbox Code Playgroud)

我检查了PHP容器,我可以看到php.ini文件中有正确的设置,或者我认为?

$ docker exec -it mymagento2docker_php_1 /bin/bash 
# cat /usr/local/etc/php/php.ini                                                                                                                  
; This file is created automatically by the docker build

memory_limit = 2G
max_execution_time = 800
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?以下是一些更多细节,提前感谢!


Docker项目

.
??? docker-compose.yml
??? index.php
??? magento2
?   ??? [DIRECTORIES & FILES OMMITED]
?                   
??? nginx
?   ??? Dockerfile
?   ??? default.conf
?   ??? nginx.conf
??? output.txt
??? php
    ??? Dockerfile
    ??? config
        ??? php.ini
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yml

nginx:
    build: ./nginx/
    ports: …
Run Code Online (Sandbox Code Playgroud)

php nginx php-ini docker dockerfile

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

我应该最小化泊坞窗层的数量吗?

文档没有详细说明该主题.它说:

最小化层数

在Docker 17.05之前,甚至更多,在Docker 1.10之前,最小化图像中的层数非常重要.以下改进减轻了这种需求:

在Docker 1.10及更高版本中,只有RUN,COPY和ADD指令可以创建图层.其他指令创建临时中间图像,不再直接增加构建的大小.

Docker 17.05及更高版本增加了对多阶段构建的支持,允许您仅将所需的工件复制到最终图像中.这允许您在中间构建阶段中包含工具和调试信息,而不会增加最终图像的大小.

看起来最新的Docker版本无法解决处理多个层的问题.他们宁愿努力减少最终图像中的数量.最重要的是,文档并没有说明为什么很多层都不好.

我知道42层的AUFS限制.对于广泛使用的图像来说保持较小的层数是有意义的,因为它有助于构建在其上的其他图像符合限制.但是,还有其他存储驱动程序和图像用于其他目的.

保持图像较小也是一个明显的原因 - 它们占用磁盘空间和网络带宽.但是,我不认为链接RUN语句并因此将多个层压缩为一个有助于一般.如果不同的RUN更新文件系统的不同部分,则一层和多层的大小应该大致相同.

另一方面,许多层允许更快地使用缓存和重建图像.它们也是平行拉动的.

我在一个拥有私有Docker注册表的小团队中工作.我们永远不会满足42层限制,主要关注性能和开发速度.

如果是这样,我应该最小化泊坞窗层的数量吗?

optimization layer docker dockerfile

22
推荐指数
3
解决办法
4454
查看次数

如何在 Dockerfile 中使用 miniconda 安装软件包?

我有一个简单的 Dockerfile:

FROM ubuntu:18.04

RUN apt-get update

RUN apt-get install -y wget && rm -rf /var/lib/apt/lists/*

RUN wget \
    https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
    && mkdir /root/.conda \
    && bash Miniconda3-latest-Linux-x86_64.sh -b \
    && rm -f Miniconda3-latest-Linux-x86_64.sh \
    && echo PATH="/root/miniconda3/bin":$PATH >> .bashrc \
    && exec bash \
    && conda --version

RUN conda --version
Run Code Online (Sandbox Code Playgroud)

它不能被建造。在最后一步,我得到了/bin/sh: 1: conda: not found......
第一次出现conda --version没有引发错误,这让我想知道这是一个PATH问题吗?
我想RUN在这个 Dockerfile 中有另一个条目,我将在其中安装包conda install ...
最后我想要CMD ["bash", "test.py"]条目,以便在执行docker run此图像时它会自动运行一个简单的 …

python docker anaconda miniconda dockerfile

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

docker 是否总是需要一个操作系统作为基础镜像

我听说 docker 在 linux 中不需要单独的操作系统,因为它与主机操作系统共享,但是在 hyper-v Windows 中它可以运行 Windows 操作系统,因为它可以超 linux 虚拟机,因此可以在其上运行 linux 软件。

但是,我FROM对 dockerfile 中的阶段感到困惑,所有指南都这样说:

FROM ubuntu:18.04
cp . /usr/local/bin
RUN make
CMD /usr/local/bin/youapp
Run Code Online (Sandbox Code Playgroud)

我可以理解这一步,首先你需要一个操作系统,然后你部署你的应用程序;最后你运行你的应用程序或其他什么。

但是 FROM 阶段的真正含义是什么?

它总是需要操作系统吗?nginx docker 映像中是否有操作系统?

如果我想构建自己的应用程序,我会编写它、编译它、运行它;但是我自己的应用程序需要操作系统吗?如果不是,我应该在FROM阶段写什么?

我得到了这张图片,它说 docker 容器不需要 os,但使用主机 os,现在 docker build 总是需要一个 os 在此处输入图片说明

docker dockerfile

22
推荐指数
3
解决办法
5849
查看次数

如何修复:在当前平台上递归地查看功能不可用,该平台用于运行 Node.js

我正在尝试在 docker 容器中运行 typescript express.js。运行docker后,我收到以下错误:

> ts-node-dev src/app.ts

Using ts-node version 8.10.1, typescript version 3.9.2
TypeError [ERR_FEATURE_UNAVAILABLE_ON_PLATFORM]: The feature watch recursively is unavailable on the current platform, which is being used to run Node.js
    at Object.watch (fs.js:1441:11)
    at add (/app/node_modules/filewatcher/index.js:74:34)
    at /app/node_modules/filewatcher/index.js:93:5
    at FSReqCallback.oncomplete (fs.js:176:5)
Run Code Online (Sandbox Code Playgroud)

我的 Dockerfile:

FROM node:alpine

WORKDIR /app
COPY package.json .
RUN npm install
COPY . .

CMD ["npm","start"]
Run Code Online (Sandbox Code Playgroud)

和 package.json 文件:

{
  "name": "app-name",
  "version": "1.0.0",
  "description": "Init master",
  "main": "src/app.ts",
  "scripts": {
    "build": "./node_modules/.bin/tsc",
    "start": …
Run Code Online (Sandbox Code Playgroud)

node.js typescript docker dockerfile alpine-linux

22
推荐指数
2
解决办法
6902
查看次数

无法使用前端 dockerfile 解决

我是 Docker 的新手,并尝试使用纯 html 构建 docker 映像,但我收到此错误消息,说 无法使用前端 dockerfile.v0 解决:无法读取 dockerfile:open /var/lib/docker/tmp/buildkit-mount602954594 /Dockerfile: 没有那个文件或目录

我的文件夹目录是这样的

C:\Users\hailey\Desktop\GitTest
                               |- Dockerfile.txt
                               |- README.md
                               |- testHelloWorld.html

Run Code Online (Sandbox Code Playgroud)

在 Dockerfile 里面,我有

FROM ubuntu  
WORKDIR C/Users/hailey/Desktop/GitTest
COPY testHelloWorld.html .
EXPOSE 8080
CMD ["html","testHelloWorld.html"]
Run Code Online (Sandbox Code Playgroud)

我做了我的命令 docker build 。在目录 C:\Users\hailey\Desktop\GitTest 内。然后得到

[+] Building 0.1s (2/2) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                           
 => => transferring dockerfile: 2B                                                                                                                                             
 => [internal] load .dockerignore                                                                                                                                              
 => => transferring context: 2B                                                                                                                                               
failed to solve with frontend dockerfile.v0: failed to read dockerfile: …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-compose

22
推荐指数
8
解决办法
4万
查看次数