我正在开展一项任务,涉及使用Dockerfile构建一个以centOs为基础的docker镜像.dockerfile中的一个步骤需要设置http_proxy和https_proxy ENV变量才能在代理后面工作.
由于这个Dockerfile将由具有不同代理的多个团队使用,我想避免为每个团队编辑Dockerfile.相反,我正在寻找一个允许我在构建时传递ENV变量的解决方案,例如,
sudo docker build -e http_proxy = somevalue.
我不确定是否已有提供此功能的选项.我错过了什么吗?
我在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的新手,在OSX上使用Boot2Docker.启动后,会显示以下消息:
To connect the Docker client to the Docker daemon, please set
export DOCKER_HOST=tcp://192.168.59.103:2375
Run Code Online (Sandbox Code Playgroud)
即使没有它,基本的Docker命令(例如docker run hello-world)也能正常工作.
安装说明信息量不大:
Note: If you see a message in the terminal that looks something like this:
To connect the Docker client to the Docker daemon, please set:
export DOCKER_HOST=tcp://192.168.59.103:2375
you can safely set the evironment variable as instructed.
Run Code Online (Sandbox Code Playgroud)
知道它是"安全的"并没有说明为什么它有用.
我不清楚的是:
我在boot2docker 1.3.1下运行.
我有一个运行Web服务器的Docker容器uwsgi --http :8080.
如果我附加到容器,我可以使用浏览网站,lynx http://127.0.0.1:8080所以我知道服务器正在运行.
我运行我的容器:
$ docker run -itP --expose 8080 uwsgi_app:0.2
Run Code Online (Sandbox Code Playgroud)
它有以下细节:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5248ad86596d uwsgi_app:0.2 "bash" 11 minutes ago Up 11 minutes 0.0.0.0:49159->8080/tcp cocky_hypatia
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 5248ad86596d
172.17.0.107
Run Code Online (Sandbox Code Playgroud)
我以为我可以通过访问来自我的主机访问该网站http://172.17.0.107:49159.
这不起作用.我只是在Chrome中看到"连接......",无处可去.
我究竟做错了什么?
在虚拟化Linux系统中耗尽熵似乎是一个常见问题(例如/ dev/random极慢?,让linux缓冲/ dev/random).尽管使用了硬件随机数生成器(HRNG),但经常建议使用像HAVEGED这样的熵收集守护进程.但是,熵收集守护程序(EGD)无法在Docker容器内运行,它必须由主机提供.
使用EGD适用于基于Linux发行版(如Ubuntu,RHEL等)的docker主机.在boot2docker中运行这样的守护进程 - 基于Tiny Core Linux(TCL) - 似乎是另一个故事.尽管TCL具有扩展机制,但是熵收集守护程序的扩展似乎不可用.
因此,EGD似乎是在(生产)托管环境中运行docker容器的正确解决方案,但是如何解决它在boot2docker中进行开发/测试?
由于在boot2docker中运行EGD似乎太难了,我想只需使用/ dev/urandom而不是/ dev/random.使用/ dev/urandom不太安全,但对于大多数没有生成长期加密密钥的应用程序仍然可以.至少它应该适用于boot2docker中的开发/测试.
我是虚拟化世界的新手.有人能解释一下OpenVZ和Docker之间的区别吗?
对未来有什么好处?
优点和缺点?
由于boot2docker已弃用,我已切换到docker-machine但我不知道如何打开端口docker-machine.在boot2docker我可以这样做:
boot2docker ssh -L 27017:localhost:27017
Run Code Online (Sandbox Code Playgroud)
只要SSH连接打开,这就会将端口27017从VirtualBox转发到localhost 27017.请注意,我不是在寻找一种在VirtualBox中永久打开端口的方法.我怎样才能实现这一目标docker-machine?
在任何地方都找不到答案......我使用docker-machine创建了一个VM(boot2docker).我需要使用root编辑一些文件.
boot2docker中的root密码是什么?
这个东西现在真的很混乱了.有人可以解释一下发生了什么.只是直的一个班轮差异.
dockerdlibcontainerdcontainerddocker-containerddocker-runcdocker-containerd-ctrdocker-containerd-shim谢谢
我在Windows中运行boot2docker VM,需要修改VM中的init脚本.目前我唯一的选择是VI,这很痛苦.我只想使用nano,但它不可用.
它正在运行:
docker@boot2docker:/c$ uname -a
Linux boot2docker 3.18.5-tinycore64 #1 SMP Sun Feb 1 06:02:30 UTC 2015 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
没有apt-get或任何包管理器.我怎样才能添加nano以便我可以轻松编辑文件?
编辑:
@ John-Petrone的答案有效,但安装完成后,运行nano会出错:
Error opening terminal: cygwin.
Run Code Online (Sandbox Code Playgroud)
如果其他人有这个问题,问题是$ TERM被设置为cygwin.不知道为什么.我只是:
TERM=xterm-color
Run Code Online (Sandbox Code Playgroud)
纳米工作!(如果设置为/ usr/share/terminfo/x中的任何其他可用术语,则显示出时髦字符)