标签: dockerfile

单个文件卷作为目录安装在Docker中

Docker文档说可以将单个文件挂载到Docker容器中:

-v标志还可用于从主机安装单个文件 - 而不仅仅是目录.

$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash

这将使您进入新容器中的bash shell,您将获得主机的bash历史记录,当您退出容器时,主机将具有在容器中键入的命令的历史记录.

当我尝试这个时,文件安装为目录:

tom@u ~/project $ docker run --rm -it -v file.json:/file.json test
total 80K
drwxr-xr-x  9 root root 4.0K Dec  7 12:58 .
drwxr-xr-x 63 root root 4.0K Dec  7 12:58 ..
drwxr-xr-x  2 root root 4.0K Dec  4 16:10 file.json
Run Code Online (Sandbox Code Playgroud)

我的Dockerfile看起来像这样:

FROM ubuntu:14.04
MAINTAINER Tom
CMD ["ls", "-lah", "/test"]
Run Code Online (Sandbox Code Playgroud)

Docker版本是1.9.1,构建a34a1d5.

这是一个文档问题,在我身边的误解,还是还有其他事情发生?

linux docker dockerfile

48
推荐指数
5
解决办法
5万
查看次数

Docker使用gosu vs USER

Docker总是有一个USER命令来作为特定用户运行进程,但一般来说很多东西必须作为ROOT运行.

我已经看到很多图像使用ENTRYPOINTwith gosu来提升运行过程.

对于需要,我仍然有点困惑gosu.用户不应该够吗?

我知道在Docker 1.10的安全性方面有很多变化,但我仍然不清楚在docker容器中运行进程的推荐方法.

有人可以解释我什么时候使用gosuvs.USER

谢谢

编辑:

Docker 最佳实践指南不是很清楚:它说如果进程可以在没有特权的情况下运行,请使用USER,如果你需要sudo,你可能想要使用gosu.这是令人困惑的,因为人们可以在ROOT中安装各种东西Dockerfile,然后创建一个用户并赋予它适当的权限,然后最终切换到该用户并运行该CMD用户.那么为什么我们需要sudo gosu呢?

docker dockerfile

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

新的Docker如何运作

Docker 1.13中添加了新的--squash参数.

我现在希望减小图像的大小,以及能够"隐藏"我的图层中的秘密文件.

现在,您可以看到使用和不使用--squash参数进行构建的区别.

没有壁球

在此输入图像描述

用壁球

在此输入图像描述

现在问我的问题.

如果我在第一层中添加一个秘密文件,那么在我的第二层中使用秘密文件,最后在第三层中删除我的秘密文件,然后使用--squash标志进行构建.

现在有办法得到秘密文件吗?

squash docker dockerfile

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

如何使用官方的PHP Docker镜像方法安装php-redis扩展?

我想php-redis基于官方的PHP Docker镜像构建我的PHP-FPM图像扩展,例如,使用这个Dockerfile:php:5.6-fpm.

文档说我可以这种方式安装扩展,手动安装扩展的依赖项:

FROM php:5.6-fpm
# Install modules (iconv, mcrypt and gd extensions)
RUN apt-get update && apt-get install -y \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng12-dev \
    && docker-php-ext-install iconv mcrypt \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install gd
CMD ["php-fpm"]
Run Code Online (Sandbox Code Playgroud)

没有Docker,我安装了它apt-get install php5-redis.但是如何使用上述方法安装它?

php redis docker dockerfile

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

Dockerfile可以扩展另一个吗?

我有一个像这样的PHP Dockerfile:

FROM php:7-fpm
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && \
    apt-get install -y git libicu-dev libmagickwand-dev libmcrypt-dev libcurl3-dev jpegoptim
RUN pecl install imagick && \
    docker-php-ext-enable imagick

RUN docker-php-ext-install intl
RUN docker-php-ext-install pdo_mysql
RUN docker-php-ext-install opcache
RUN docker-php-ext-install mcrypt
RUN docker-php-ext-install curl
RUN docker-php-ext-install zip
Run Code Online (Sandbox Code Playgroud)

我想创建另一个Dockerfile,基于第一个,但添加了一些PHP扩展(用于开发目的):Xdebug和其他东西.

我可以创建一个扩展我的主Dockerfile的"dev"Dockerfile(不重写它)吗?

docker dockerfile

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

如何在一个 Github Actions Docker 中运行多个命令

在一个中运行多个命令的正确方法是什么action

例如:

我想将 python 脚本作为action. 在运行此脚本之前,我需要安装requirements.txt.

我可以想到几个选项:

  • 使用Dockerfile其中的命令创建一个RUN pip install -r requirements.txt
  • 使用python:3图像,并在运行pip install -r requirements.txtin 中entrypoint.sh的参数之前运行文件args中的main.workflow
  • 同时使用pip installpython myscript.py作为args

另一个例子:

我想运行一个存在于我的存储库中的脚本,然后比较 2 个文件(它的输出和一个已经存在的文件)。

这是一个包含两个命令的过程,而在第一个示例中,该pip install命令可以被视为构建命令而不是测试命令。

问题:

我可以为另一个命令创建另一个 Docker,其中将包含前一个 Docker 的输出吗?

我正在寻找有关命令 in Dockerfile、inentrypoint或 in位置的指南args

docker dockerfile docker-entrypoint github-actions

45
推荐指数
1
解决办法
3万
查看次数

anyjson 设置命令出错:use_2to3 无效

#25 3.990   \xc3\x97 python setup.py egg_info did not run successfully.\n#25 3.990   \xe2\x94\x82 exit code: 1\n#25 3.990   \xe2\x95\xb0\xe2\x94\x80> [1 lines of output]\n#25 3.990       error in anyjson setup command: use_2to3 is invalid.\n#25 3.990       [end of output]\n
Run Code Online (Sandbox Code Playgroud)\n

这是一个常见错误,最常见的解决方案是将 setuptools 降级到版本 58 以下。这对我来说不起作用。我尝试安装 python3-anyjson 但这也不起作用。我完全不知所措......非常感谢任何建议或帮助。

\n

如果重要的话:这个应用程序是遗留的意大利面条,我正在努力完善它以进行迁移。没有任何类型的文档。

\n

需求.txt如下:

\n
cachetools>=2.0.0,<4\ncertifi==2018.10.15\nFlask-Caching\nFlask-Compress\nFlask==2.0.3\ncffi==1.2.1\ndiskcache\nearthengine-api==0.1.239\ngevent==21.12.0\ngoogle-auth>=1.17.2\ngoogle-api-python-client==1.12.1\ngunicorn==20.1.0\nhttplib2.system-ca-certs-locater\nhttplib2==0.9.2\noauth2client==2.0.1\npyasn1-modules==0.2.1\nredis\nrequests==2.18.0\nwerkzeug==2.1.2\nsix==1.13.0\npyasn1==0.4.1\nJinja2==3.1.1\nitsdangerous==2.0.1\n\n\nFlask-Celery-Helper\nFlask-JWT==0.2.0\nFlask-Limiter\nFlask-Mail\nFlask-Migrate\nFlask-Restless==0.16.0\nFlask-SQLAlchemy\nFlask-Script\nFlask-Testing\nFlask==2.0.3\nPillow<=6.2.2\nShapely\nbeautifulsoup4\nboto\ncelery==3.1.23\ngeopy\ngevent==21.12.0\nnumpy<1.17\noauth2client==2.0.1\npasslib\npsycopg2\npyproj<2\npython-dateutil==2.4.1\nscipy\n
Run Code Online (Sandbox Code Playgroud)\n

python python-3.x docker dockerfile

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

standard_init_linux.go:190:exec用户进程导致"没有这样的文件或目录"--Docker

当我在Windows 10上运行我的docker镜像时,我收到此错误:

standard_init_linux.go:190: exec user process caused "no such file or directory"
Run Code Online (Sandbox Code Playgroud)

我的docker文件是:

FROM openjdk:8

EXPOSE 8080

VOLUME /tmp

ADD appagent.tar.gz /opt/app-agent
ADD services.jar app.jar
ADD run.sh /run.sh

# Install compiler and perl stuff
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y gcc-multilib
RUN apt-get install -y perl

# Install Percona Toolkit
RUN apt-get install --yes percona-toolkit
RUN ["chmod", "+x", "/run.sh"]
ENTRYPOINT ["/run.sh"]
Run Code Online (Sandbox Code Playgroud)

并且脚本以#!/ bin/sh开头

#!/bin/sh
set -e

JAVA_OPTS="-Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/urandom"

if [ "${APPD_APP_NAME}" != …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile docker-for-windows

44
推荐指数
12
解决办法
4万
查看次数

错误:"构建dockerfile时"创建aufs mount时出错"

我尝试构建docker文件时收到此错误

 error creating aufs mount to /var/lib/docker/aufs/mnt   
 /6c1b42ce1a98b1c0f2d2a7f17c196221445f1054566065d4c607e4f1b99930eb-init:   
 invalid argument
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我如何解决它?

docker dockerfile

43
推荐指数
7
解决办法
3万
查看次数

从特定步骤重建docker图像

我有下面的Dockerfile.

FROM ubuntu:14.04
MAINTAINER Samuel Alexander <samuel@alexander.com>

RUN apt-get -y install software-properties-common
RUN apt-get -y update

# Install Java.
RUN echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | debconf-set-selections
RUN add-apt-repository -y ppa:webupd8team/java
RUN apt-get -y update
RUN apt-get install -y oracle-java8-installer
RUN rm -rf /var/lib/apt/lists/*
RUN rm -rf /var/cache/oracle-jdk8-installer

# Define working directory.
WORKDIR /work

# Define commonly used JAVA_HOME variable
ENV JAVA_HOME /usr/lib/jvm/java-8-oracle

# JAVA PATH
ENV PATH /usr/lib/jvm/java-8-oracle/bin:$PATH

# Install maven
RUN apt-get -y update
RUN apt-get -y install …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

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