如何使用Vagrant Docker提供程序的env属性?

我想用Vagrant Dockerconfiguration器更改Docker容器的环境variables。 我怎样才能做到这一点?

示例Vagrantfile:

config.vm.define 'container' do |ws| ws.vm.hostname = 'container' ws.ssh.port = 23 ws.ssh.guest_port = 23 ws.vm.provider "docker" do |d| d.image = "name/image" d.env = { "SSH_PORT" => 23 } d.vagrant_machine = "host" d.vagrant_vagrantfile = "../Vagrantfile" d.force_host_vm = true d.has_ssh = true end end 

示例Dockerfile:

 FROM centos:centos7 ENV PORT 22 #... RUN echo "Port $PORT" >> /somefile.txt #... EXPOSE $PORT 

总是以PORT = 22而不是23 d.create_args = ["-e", "PORT=23"]可能的解决方法也失败了。

来源: Vagrant Docker Docker环境variables

当您在Dockerfile定义ENV PORT 22时,它将被定义为这样,而不是从构build环境inheritance。 如果你想覆盖它,你可以在运行容器的时候这样做: docker run --rm -it -e PORT=23 <your image> env | grep PORT docker run --rm -it -e PORT=23 <your image> env | grep PORT

尝试改变d.env部分:

 d.env = { "SSH_PORT":"23" }