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.
这是一个文档问题,在我身边的误解,还是还有其他事情发生?
Docker总是有一个USER命令来作为特定用户运行进程,但一般来说很多东西必须作为ROOT运行.
我已经看到很多图像使用ENTRYPOINTwith gosu来提升运行过程.
对于需要,我仍然有点困惑gosu.用户不应该够吗?
我知道在Docker 1.10的安全性方面有很多变化,但我仍然不清楚在docker容器中运行进程的推荐方法.
有人可以解释我什么时候使用gosuvs.USER
谢谢
编辑:
Docker 最佳实践指南不是很清楚:它说如果进程可以在没有特权的情况下运行,请使用USER,如果你需要sudo,你可能想要使用gosu.这是令人困惑的,因为人们可以在ROOT中安装各种东西Dockerfile,然后创建一个用户并赋予它适当的权限,然后最终切换到该用户并运行该CMD用户.那么为什么我们需要sudo gosu呢?
在Docker 1.13中添加了新的--squash参数.
我现在希望减小图像的大小,以及能够"隐藏"我的图层中的秘密文件.
现在,您可以看到使用和不使用--squash参数进行构建的区别.
没有壁球
用壁球
现在问我的问题.
如果我在第一层中添加一个秘密文件,那么在我的第二层中使用秘密文件,最后在第三层中删除我的秘密文件,然后使用--squash标志进行构建.
现在有办法得到秘密文件吗?
我想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 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(不重写它)吗?
在一个中运行多个命令的正确方法是什么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 install和python myscript.py作为args我想运行一个存在于我的存储库中的脚本,然后比较 2 个文件(它的输出和一个已经存在的文件)。
这是一个包含两个命令的过程,而在第一个示例中,该pip install命令可以被视为构建命令而不是测试命令。
我可以为另一个命令创建另一个 Docker,其中将包含前一个 Docker 的输出吗?
我正在寻找有关命令 in Dockerfile、inentrypoint或 in位置的指南args。
#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]\nRun Code Online (Sandbox Code Playgroud)\n这是一个常见错误,最常见的解决方案是将 setuptools 降级到版本 58 以下。这对我来说不起作用。我尝试安装 python3-anyjson 但这也不起作用。我完全不知所措......非常感谢任何建议或帮助。
\n如果重要的话:这个应用程序是遗留的意大利面条,我正在努力完善它以进行迁移。没有任何类型的文档。
\n需求.txt如下:
\ncachetools>=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\nRun Code Online (Sandbox Code Playgroud)\n 当我在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文件时收到此错误
error creating aufs mount to /var/lib/docker/aufs/mnt
/6c1b42ce1a98b1c0f2d2a7f17c196221445f1054566065d4c607e4f1b99930eb-init:
invalid argument
Run Code Online (Sandbox Code Playgroud)
这是什么意思?我如何解决它?
我有下面的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)