Lando in Corporate Network Environments
Many large organizations have proxy services, SSL decryption, and other network settings that can interfere with how Docker and Lando operate. In this guide we try to collect some common issues with using Lando in such contexts.
Config may vary!
Depending on your environment's configuration, there is A LOT of variation in setups. This guide offers some tips on common scenarios; it is not comprehensive or prescriptive. When in doubt, talk with your network administrator!
Defining Proxy Location
Some proxy setups may require your outbound traffic to leave through a specified port; in these cases you may need to modify your host machine's
export HTTP_PROXY=http://localhost:9000 export HTTPS_PROXY=http://localhost:9000
Additionally, you'll want to specify that proxy in your Docker Desktop settings (if running on Windows or Mac). Under Settings > Resources > Proxies, specify...
- Web Server: http://localhost:9000
- Secure Web Server: http://localhost:9000
...and finally you may need to specify the proxy in the
.lando.yml file for your project(s):
environment: HTTP_PROXY: "http://host.docker.internal:9000" HTTPS_PROXY: "http://host.docker.internal:9000"
Define Proxy Location for
If you use
apt-get to install packages within a container, you will probably need to define the proxy location for it as well. To do so, modify your project's
.lando.yml to add the following
build_as_root: - cp /app/.lando/config/apt.conf /etc/apt/apt.conf
apt.conf should look like this:
Again, configuring the proxy location may not be necessary in your environment.
SSL Decryption/Missing CA Cert Problems
SSL decryption is basically an "authorized" man-in-the-middle attack that is allowed to happen when an intermediate network device (i.e. the SSL decryptor) can intercept all of your requests and pose as the destination server to your local network client. Due to the security precautions in the SSL/TLS protocol, this only works if your network client trusts the certificate that is used by the decryption device. We've most commonly seen SSL Decryption used with ZScaler.
If you're missing the cert from your SSL decryptor, you'll likely see one of the following errors like:
Error: unable to get local issuer certificate
curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: http://curl.haxx.se/docs/sslcerts.html
If you experience a
request to undefined failed with code 200: undefined. error when running a
lando init command and trying to connect with a 3rd-party hosting service like Pantheon, this may also be your root issue.
Here are the basic steps to enable Lando to work inside such a network environment:
Retrieve Your Cert
Obtain the certificate(s) of the decryption device in base64 encoded format. Your organization's IT or networking department should be able to provide them to you as they most likely are already importing them into the Windows trusted certificate store so that Windows and other programs like your internet browser will work. Alternatively, you can export them using your internet browser. Go to any website and click the padlock icon next to the site's URL and inspect the certificate. You should find that it's a custom certificate belonging to your organization's decryption device and not the certificate belonging to the actual website you're visiting. There should be an option to export or save the certificate. View the certification path as there may be more than one certificate you need to export. (In our case, we have a custom root certificate authority as well as an intermediary certificate.)
Add Cert to Host Environment
If Lando is experiencing errors before an application is started (IE, before any Docker containers are running for your project), then it's likely that either Node or another service on your host machine doesn't have access to the decryption device's cert.
Make sure that NodeJS has access to the cert:
This can also happen if you're running Windows with WSL, in which case you'll need to install the certs in the WSL Linux distro so that various commands like git can access the internet. Run these commands in your directory containing your certificates, replacing
yourcert.crt with the name of your certificates:
sudo su cp yourcert.crt /usr/local/share/ca-certificates/ update-ca-certificates
Note the location of the certs may change depending on your Linux distribution.
Add Cert to Lando Containers
Once Lando is running, there are a number of cases where code running inside Lando's containers may need to have the certs installed as well. To do this, first store the certificates somewhere in your Lando project directory. We just put them in our project's root directory, so within the container the cert is available at
Adding Certs to an Appserver Container
Add this to your project's
yourcert.crt with the name of your certificates:
services: appserver: build_as_root: - sed 's|mozilla\/AddTrust_External_Root.crt|#mozilla\/AddTrust_External_Root.crt|g' -i /etc/ca-certificates.conf - cp /app/yourcert.crt /usr/local/share/ca-certificates/ - chmod 644 /usr/local/share/ca-certificates/yourcert.crt - update-ca-certificates
Adding Certs for PHP cURL Requests
If you make external requests with the PHP process in your app, you will also need to include the cert in your appserver's
services: appserver: ## Use a custom php.ini to instruct curl and openssl to use the yourcert.crt, which includes the Zscaler cert. config: php: .lando/config/php.ini
Add these two lines to
php.ini to reference your cert:
Adding Certs to a NodeJS Service
If you have a Node server in your Lando environment, you'll need to concatenate your certificates into a single .pem file and add this to your Node configuration:
node: type: node overrides: environment: NODE_EXTRA_CA_CERTS: /app/yourcert.crt
Alternatively, you can specify your cert in a
.npmrc file. This is also a great way to specify proxy location if necessary.
build: - cp /app/.lando/config/.npmrc ~/.npmrc
proxy=http://host.docker.internal:9000 https-proxy=http://host.docker.internal:9000 cafile=/app/yourcert.crt
Adding Certs for Native cURL
If you use cURL outside of the cURL PHP extension, you'll need to provide the cert (and possibly the proxy location). Add the following build step to your
build: - cp /app/.lando/config/.curlrc ~/.curlrc
.curlrc should contain the following:
cacert /app/yourcert.crt proxy http://host.docker.internal:9000
lando rebuild to rebuild all of the services you added the certs. Hopefully you should be able to access the internet through your network decryption device!