{"record":{"id":"fac7cbc3977ad973","repo":"hashicorp/vagrant","slug":"invalid-option-given-for-docker-network-for-guest","errorCode":null,"errorMessage":"Invalid option given for docker network for guest \"%{container}\". Must specify either\na `subnet` or use `type: \"dhcp\"`.","messagePattern":"Invalid option given for docker network for guest \"%(.+?)\"\\. Must specify either\na `subnet` or use `type: \"dhcp\"`\\.","errorType":"exception","errorClass":"VagrantPlugins::DockerProvider::Errors::NetworkInvalidOption","httpStatus":null,"severity":"error","filePath":"plugins/providers/docker/action/prepare_networks.rb","lineNumber":350,"sourceCode":"              env[:ui].info(I18n.t(\"docker_provider.network_create\"))\n              machine.config.vm.networks.each_with_index do |net_info, net_idx|\n                type, options = net_info\n                network_options = scoped_hash_override(options, :docker_network)\n                network_options.delete_if{|k,_| options.key?(k)}\n\n                case type\n                when :public_network\n                  network_name, network_options = process_public_network(\n                    options, network_options, env)\n                when :private_network\n                  network_name, network_options = process_private_network(\n                    options, network_options, env)\n                else\n                  next # unsupported type so ignore\n                end\n\n                if !network_name\n                  raise Errors::NetworkInvalidOption, container: machine.name\n                end\n\n                if !machine.provider.driver.existing_named_network?(network_name)\n                  @logger.debug(\"Creating network #{network_name}\")\n                  cli_opts = generate_create_cli_arguments(network_options)\n                  machine.provider.driver.create_network(network_name, cli_opts)\n                else\n                  @logger.debug(\"Network #{network_name} already created\")\n                  validate_network_configuration!(network_name, options, network_options, machine.provider.driver)\n                end\n                connections[net_idx] = network_name\n              end\n            end\n          end\n\n          env[:docker_connects] = connections\n          @app.call(env)\n        end","sourceCodeStart":332,"sourceCodeEnd":368,"githubUrl":"https://github.com/hashicorp/vagrant/blob/35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5/plugins/providers/docker/action/prepare_networks.rb#L332-L368","documentation":"A guard in PrepareNetworks#call: after dispatching each :public_network/:private_network entry to its processor, an entry whose result carries no network name is rejected with NetworkInvalidOption. The message states the contract - the network entry must pin addressing via a subnet or be marked type: \"dhcp\" (an ip: or name: also gives processing enough to derive a name).","triggerScenarios":"vm.network entries whose option combination yields no network name after processing: in older Vagrant releases a type: \"dhcp\" network without ip/subnet fell through to this guard, and docker_network/docker_connect scoped overrides can strip ip/subnet/type until nothing usable remains.","commonSituations":"Copying VirtualBox-style bare `config.vm.network \"private_network\"` (DHCH implied there, not for docker) into a Docker-provider machine; hand-pruning network options while debugging.","solutions":["Mark DHCP explicitly: config.vm.network \"private_network\", type: \"dhcp\"","Or supply addressing: ip: \"172.20.0.10\" or subnet: \"172.20.0.0/24\"","Update Vagrant - current code defaults nameless DHCP networks to the shared \"vagrant_network\"","Remove scoped overrides that delete ip/subnet/type options"],"exampleFix":"# before\nconfig.vm.network \"private_network\"\n\n# after\nconfig.vm.network \"private_network\", type: \"dhcp\"\n# or\nconfig.vm.network \"private_network\", subnet: \"172.20.0.0/24\"","handlingStrategy":"validation","validationCode":"# quick lint: every docker-bound network needs ip, subnet, name, or dhcp\nmachine.config.vm.networks.each do |type, opts|\n  next unless [:private_network, :public_network].include?(type)\n  ok = opts[:ip] || opts[:subnet] || opts[:name] || opts[:type].to_s == \"dhcp\"\n  warn \"network lacks addressing: #{opts.inspect}\" unless ok\nend","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never copy bare VirtualBox-style private_network lines into docker machines - always add type: \"dhcp\" or an ip/subnet","Review docker_network__* overrides so they do not strip addressing options","Run `vagrant validate` plus this lint in CI"],"tags":["vagrant","docker","network","config","validation"],"backgroundTag":"missing-network-options","analyzedSha":"35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5","analyzedAt":"2026-08-21T13:34:32.514Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}