标签: dockerfile

如何使用Dockerfile将文件从主机复制到容器

我写了一个看起来像这样的Dockerfile

FROM ubuntu:12.04

RUN apt-get update
RUN apt-get install -y wget
Run Code Online (Sandbox Code Playgroud)

现在我abc.txt在主机上调用了一个文件.如何将其复制到此容器中.我是否可以在Dockerfile中添加从Host复制到Container的任何步骤.

docker boot2docker dockerfile docker-registry

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

我们可以通过dockerfile构建docker镜像时通过cmd行传递ENV变量吗?

我正在开展一项任务,涉及使用Dockerfile构建一个以centOs为基础的docker镜像.dockerfile中的一个步骤需要设置http_proxyhttps_proxy ENV变量才能在代理后面工作.

由于这个Dockerfile将由具有不同代理的多个团队使用,我想避免为每个团队编辑Dockerfile.相反,我正在寻找一个允许我在构建时传递ENV变量的解决方案,例如,

sudo docker build -e http_proxy = somevalue.

我不确定是否已有提供此功能的选项.我错过了什么吗?

environment-variables docker boot2docker dockerfile

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

Dockerfile中的条件ENV

是否可以ENV根据构建的值有条件地在Dockerfile中设置变量ARG

例如:像

ARG BUILDVAR=sad
ENV SOMEVAR=if $BUILDVAR -eq "SO"; then echo "hello"; else echo "world"; fi
Run Code Online (Sandbox Code Playgroud)

更新:基于Mario答案的当前使用情况:

ARG BUILD_ENV=prod
ENV NODE_ENV=production
RUN if [ "${BUILD_ENV}" = "test" ]; then export NODE_ENV=development; fi
Run Code Online (Sandbox Code Playgroud)

然而,运行,--build-arg BUILD_ENV=test然后进入主机,我仍然得到

docker run -it mycontainer bin/bash
[root@brbqw1231 /]# echo $NODE_ENV
production
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

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

Docker-compose检查mysql连接是否准备就绪

我试图确保我的应用程序容器在db容器启动和READY TO接受连接之前不运行迁移/启动.

所以我决定使用healthcheck并依赖于docker compose file v2中的选项.

在应用程序中,我有以下内容

app:
    ...
    depends_on:
      db:
      condition: service_healthy
Run Code Online (Sandbox Code Playgroud)

另一方面,db具有以下健康检查

db:
  ...
  healthcheck:
    test: TEST_GOES_HERE
    timeout: 20s
    retries: 10
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,如:

  1. 确保创建db DIR test: ["CMD", "test -f var/lib/mysql/db"]
  2. 获取mysql版本: test: ["CMD", "echo 'SELECT version();'| mysql"]
  3. Ping管理员(将数据库容器标记为健康,但似乎不是有效的测试) test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]

有人有解决方案吗?

mysql docker dockerfile docker-compose

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

Docker在上下文之后遵循符号链接

另一个Docker符号链接问题.我有一堆文件要复制到我的所有Docker构建中.我的目标结构是:

parent_dir
    - common_files
        - file.txt
    - dir1
        - Dockerfile  
        - symlink -> ../common_files
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我想在我在dir1中构建docker时复制file.txt.但我不想保留file.txt的多个副本.根据这个链接,从docker版本0.10开始,docker build必须

按照容器根目录中的符号链接获取ADD构建说明.

但是当我在Dockerfile中使用这些行中的任何一行构建时,我都没有这样的文件或目录:

ADD symlink /path/dirname 要么 ADD symlink/file.txt /path/file.txt

mount选项不会为我解决(跨平台......).我尝试tar -czh . | docker build -t没有成功.

有没有办法让Docker遵循符号链接并将common_files/file.txt复制到构建的容器中?

symlink symlink-traversal docker dockerfile

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

有没有办法将Docker镜像组合成1个容器?

我现在有几个Dockerfiles.

一个是Cassandra 3.5,它是 FROM cassandra:3.5

我也有一个用于Kafka的Dockerfile,但是t要复杂得多.它FROM java:openjdk-8-fre运行了很长的命令来安装Kafka和Zookeeper.

最后,我有一个用Scala编写的应用程序,它使用SBT.

对于那个Dockerfile,它是FROM broadinstitute/scala-baseimage我的Java 8,Scala 2.11.7和STB 0.13.9,这是我需要的.

也许,我不明白Docker是如何工作的,但是我的Scala程序将Cassandra和Kafka作为依赖项并用于开发目的,我希望其他人能够简单地克隆我的repo Dockerfile然后能够用Cassandra,Kafka构建它,Scala,Java和SBT都融入其中,以便他们可以编译源代码.我虽然遇到了很多问题.

如何组合这些Dockerfiles?我如何简单地制作出烘焙过的环境?

docker dockerfile docker-image

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

Docker构建提供"无法准备上下文:上下文必须是目录:/ Users/tempUser/git/docker/Dockerfile"

我有一个Dockerfile应该建立一个Ubuntu图像.但是当我跑步的时候

docker build -t ubuntu-test:latest ./Dockerfile
Run Code Online (Sandbox Code Playgroud)

它在控制台上显示以下错误

无法准备上下文:context必须是一个目录:/ Users/tempUser/git/docker/Dockerfile

我在Mac OsX上.我也试过了sudo.什么都行不通.

docker dockerfile

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

Docker复制并更改所有者

给出以下Dockerfile

FROM ubuntu
RUN groupadd mygroup
RUN useradd -ms /bin/bash -G mygroup john
MKDIR /data
COPY test/ /data/test data
RUN chown -R john:mygroup /data
CMD /bin/bash
Run Code Online (Sandbox Code Playgroud)

在我复制的测试目录中,我已将文件权限设置为770.

如果我su john在容器内部进行操作,则无法访问测试目录中的任何文件或子目录.看来这个问题与aufs文件系统中的所有权有关,其中复制的目录仍由root拥有,权限设置为770.

是否有解决此问题的方法来正确设置权限?可以在复制之前将原始目录的权限设置为容器用户的uid.但这似乎更像是一个黑客.

file-permissions docker dockerfile

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

Docker - 图像操作系统"windows"不能在此平台上使用

我在Windows 10机器上试过这个:

Dockerfile:

From microsoft/nanoserver
CMD ["echo", "Hello World"]
Run Code Online (Sandbox Code Playgroud)

PS

C:\FSD\Docker\Trial1> docker build -t lea/leatest .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM microsoft/nanoserver
latest: Pulling from microsoft/nanoserver
bce2fbc256ea: Pulling fs layer
58f68fa0ceda: Pulling fs layer
image operating system "windows" cannot be used on this platform
Run Code Online (Sandbox Code Playgroud)

docker boot2docker dockerfile docker-compose docker-machine

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

Dockerfile - 将ENV设置为命令结果

是否可以将docker ENV变量设置为命令的结果?喜欢:

ENV MY_VAR whoami
Run Code Online (Sandbox Code Playgroud)

我希望MY_VAR获得值"root"或者任何whoami返回的值

env dockerfile

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