Or, alternatively, pull it directly from the GitHub package repository with: To start playing with it and see how Windows Containers are built. I have based these instructions on those, with some tweaks learned from real world testing. (Reading database 36399 files and directories currently installed.) Its surprisingly easy! For me launching dockerd failed since chain of commands with ifconfig returned some extra garbage. Know a bit of python, php, laravel and other few languages. This function can be placed in your Powershell profile, usually located at ~\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1. Now on to the Linux containers. Windows 11 Enterprise: 6 TB. Hi Muttsuri, Yes I use Portainer to manage containers and stacks on server. It works now. Just run wsl --set-default-version 2, and re install your linux distribution. How do I align things in the following tabular environment? The builder is the oldest and slowest, but gets the job done. It requires a small proxy application to make it work though. Ip stuff port forwarding etc. The only option that we had is to run a corporate-managed VM on Azure, with their own "linux" which is a special build from oracle that I never heared of before they mentionned it, and where no open source tools seems to offer any kind of support. Staging Ground Beta 1 Recap, and Reviewers needed for Beta 2. Choose a number greater than 1000 and less than 65534. On the official Data Gateway documentation it says th. If so, you have success. Once unpublished, this post will become invisible to the public and only accessible to Jonathan Bowman. If you instead received an error containing something like "Sorry, user myusername may not run sudo" then you may need to follow the steps again, from the beginning. Once unpublished, all posts by _nicolas_louis_ will become hidden and only accessible to themselves. Thanks for this post, very useful previously. When executing these lines you'll be prompted to enter your distro password (sudo) and I'll see after the log of dockerd. I got this error, I solved it by running WSL itself with admin privileges when opening the WSL window to run sudo dockerd. c:\bin\docker -H tcp://172.20.5.64 run --rm hello-world. code of conduct because it is harassing, offensive or spammy. Docker works on WSL 2, and without requiring the robust but heavy Docker Desktop if that is undesirable. What!??? Hi, you can use the variable DOCKER_HOST to specify the way you want to connect to docked : unix://, tcp://, ssh://. If using the script earlier to launch dockerd, then $DOCKER_HOST will be set, and future invocations of docker will not need an unwieldy -H unix:///mnt/wsl/shared-docker/docker.sock. It just isn't setting up the legacy rules. And, yes, VSCode can work with podman. It just doesn't set the default links in the install process to be able to switch to the legacy rules. I receive the same problems, the installation just stops or freezes forever. Templates let you quickly answer FAQs or store snippets for re-use. OS Build 19044.1586". docker context will likely be your friend. In WSL2, it's not possible to assign IP address but, I can use the windows port forwarding to redirect a local port from the host to a specific one of my distribution. However, if you would like to have the option of sharing the Docker socket system-wide, across WSL distributions, then a shared directory accessible to all is needed. Here is what you can do to flag bowmanjd: bowmanjd consistently posts content that violates DEV Community's On Alpine, that's apk add sudo and on Fedora, dnf install sudo. Your docker daemon is running in WSL and you are just connecting to it with de docker command on Windows. Once unsuspended, bowmanjd will be able to comment and publish posts again. rev2023.3.3.43278. with all that said: I do sincerely hope that anyone able and/or required to pay for a license actually does so it would be really sad for Docker to have come this far, having influenced so many aspects of "containerization", only to fade into the background because of "suddenly not being free to everybody". The Docker static binaries are distributed under the Apache 2 license and do not require a Docker Desktop subscription, even for commercial use. Well, let's check. How To Install Docker Without Docker Desktop On Windows | by Paul Knulst | Better Programming 500 Apologies, but something went wrong on our end. Did 9 even use nftables? Success. 2.) By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. Call me stupid, but I think, this was one of my many attempts to get this working. Connecting to any sort of enterprise-y VPN or WiFi just doesn't work. Debian and Ubuntu will configure this automatically at first launch, as should Alpine if you installed it from the Store. Hi Pawel, thank you for your feedback. If you came here looking how to get Docker running easily, or if you want Windows containers (still a rarity) out of the box, then Docker Desktop is your friend, and you can go install it now. Let's make everything new and shiny with one of the following: Upgrading the packages also serves as a network test. Is your user a "sudoer"? If the /etc/docker directory does not exist yet, create it with sudo mkdir /etc/docker/ so it can contain the config file. aria2 speeds up downloads. Run docker-compose up -d to bring all the containers up. If you dont want to switch between Windows and WSL when running Windows or Linux containers, you can just expose the Docker Daemon in WSL2 and create a context for it. Refresh the page, check Medium 's site status, or find something interesting to read. Once unpublished, this post will become invisible to the public and only accessible to Nicolas Louis. Note that the above steps involving the docker group will need to be run on any WSL distribution you currently have or install in the future, if you want to give it access to the shared Docker socket. Rancher Desktop for windows is a very straightforward application. To run Linux containers on Windows there must be some kind of virtualization since containers use the kernel of the host operating system. In a windows terminal (Windows Power Shell) , launch : sudo dockerd -H `ifconfig eth0 | grep -E "([0-9]{1,3}. Hi, followed everything but on doing sudo dockered getting this error. My goal is to use the docker-cli in Windows (docker.exe), but using Linux containers, without the installation of Docker Desktop. The application data stays neatly within the container, instead of on the host file system. (Just dial DOCKR on your telephone keypad) Not likely to be already in use, but check anyway: If the above command returns a line from /etc/group (that does not include docker), then pick another number and try again. How to force Docker for a clean build of an image. The docker desktop documentation page isn't clear to me if it will work with or without WSL (or wsl2). If you only plan on using one WSL distro, this next step isn't strictly necessary. Under the hood, rancher is managing for you all the complexity of creating a Linux subsystem and configure it to work with docker. Success? WARN[2021-11-06T15:39:10.294801200+05:30] Support for listening on TCP without authentication or explicit intent to run without authentication will be removed in the next release host="tcp://169.254.255.121:2375" For further actions, you may consider blocking this person and/or reporting abuse. If I exec into the running container then DNS is not working. Are you sure you want to hide this comment? I got this so I just added "iptables": false to my daemon.json and this error was averted. Does the command wsl --set-default-version 2 work? Posted on Feb 14, 2021 Is it just to control the shared docker socket location, or are there other reasons? Once suspended, _nicolas_louis_ will not be able to comment or publish posts until their suspension is removed. If the result is a random hash string, then you are good. My goal is to use the docker-cli in Windows (docker.exe), but using Linux containers, without the installation of Docker Desktop. This guide includes instructions for launching dockerd in Debian, Ubuntu, Alpine, and Fedora. I have a Dockerfile that builds a Windows container with a development environment for the Nim programming language. I tried to made some simplifications from the initial article from Jonathan Bowman. I reinstalled the Debian WSL. But that never worked for me for some reason. error:failed to load listeners: listen tcp 169.254.218.38:2375: bind: cannot assign requested address Using apt install --reinstall iptables. (If your Fedora does not have passwd, then you will need to first dnf install passwd cracklib-dicts). How to get a Docker container's IP address from the host, Docker: Copying files from Docker container to host. Redefined, https://download.docker.com/linux/${ID}/gpg, Ubuntu on WSL2 : in Microsoft Store Ubuntu 20.04 LTS, Docker extension for VSCode : directly from Visual Code Extensions Marketplace. ){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d:`. Chris 192 Followers Follow More from Medium Tony DevOps in K8s K9s, Terminal Based UI to Manage Your Cluster Flavius Dinu You simply package each application into a container and run it. Trying to get started NOTE: If you have any issue with the network, check the following location and edit its nameserver IP to 8.8.8.8:. Microsoft is increasingly standardizing on its in-house CBL-Mariner Linux distribution. I honestly haven't tried this with older versions of Debian. Once unsuspended, _nicolas_louis_ will be able to comment and publish posts again. Once you have installed the distro of your choice, launch it and set up a non-root user if you have not already. The install documentation has two sections. In parallel, in a windows terminal opened in my distro, I can check with top or htop if dockerd processes are running. Another option may eventually be Rancher Desktop if they add Windows support, but it is currently limited to Linux containers. Confirm that whoami yields the correct username. Step-2: Enable Docker Running Environment 1. Feel free to try it out. Registry::HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\, "deb [arch=amd64] https://download.docker.com/linux/, "unix:///mnt/wsl/shared-docker/docker.sock", unix:///mnt/wsl/shared-docker/docker.sock, '$(wslpath -a . Note that Docker Desktop is only free individuals or for small companies. Hey Derek, I believe the \mnt\wsl location is chosen so multiple Linux installations can share the same docker daemon. Still same error after switching explicitly to iptables-legacy in debian 11. Here is what I get: $ update-alternatives --config iptables It is the latest from Microsoft - or so I thought. Excellent. sudo apt update, sudo apt install docker-ce docker-ce-cli containerd.io, "Then close that WSL window, and launch WSL again. ){3}[0-9]{1,3}" | grep -v 127.0.0.1 |awk '{ print $2 }' | cut -f2 -d: Does anybody has a equivalent command for Alpine? failed to start daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables v1.8.4 (legacy): can't initialize iptables table `nat': Table does not exist (do you need to insmod?) so.. my morning started out heading towards this rabbit-hole, but then fortunately I checked with our HR department, and discovered that my employer doesn't exceed the requirements for a commercial Docker Desktop license. I realize that your post indicated to use iptables: false as a way to get debian wsl2 instances to work with docker. I'm having same issue, using Debian 11 on WSL2. I'm currently trying to understand how docker can help me in my daily work. First, open the container host you want to manage, and in the Tools pane, select the Containers extension. It will become hidden in your post, but will still be visible via the comment's permalink. If, however, you manually invoke dockerd in some way, then the following may be desirable in your .bashrc or .profile, if you opted for the shared docker socket directory: The above checks for the docker socket in /mnt/wsl/shared-docker/docker.sock and, if present, sets the $DOCKER_HOST environment variable accordingly. Is it known that BQP is not contained within NP? Chances are, you already know these. If your admin account is different to your user account, add the docker-users group. Ubuntu works correctly, I think because they still use iptables and not the nftables in Debian that Docker apparently doesn't really understand unless you configure nftables just right. But if the above commands fail to access the package servers, it may be something unique to your network, or your firewall or anti-malware software. If so, read on. I have written about getting Podman to work on WSL 2. DEV Community 2016 - 2023. On removing that, docker can use its default iptables impl and work with Debian Bullseye. A little more suggestion about TCP access, as well. More information about the setup, my NAS and Disks are less then a year old and in perfect condition. Docker Desktop is not supported on Windows Server 2019 OS host, Docker Desktop is only supported on Windows 10 host, Mac and planned for Linux Desktop ( there are kernel difference b/w Windows server host and Windows 10 desktop) Fetched 288 kB in 0s (2,349 kB/s) For more information and to change your decision later, see, # Optionally enable required Windows features if needed, https://download.docker.com/win/static/stable/x86_64/docker-20.10.13.zip, "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu, 's/\ -H\ fd:\/\//\ -H\ fd:\/\/\ -H\ tcp:\/\/127.0.0.1:2375/g', mcr.microsoft.com/windows/nanoserver:1809. ){3}[0-9]{1,3}" | grep -v 127.0.0.1 |awk '{ print $2 }' | cut -f2 -d:`, And you get the IP address, as described before, In the Powershell windows of the terminal, you can run the following command The flip side though is that if you are the type that prefers minimal command line interfaces then you can also install 'native' Linux Docker on WSL 2 without Docker Desktop and switch back and forth as needed. I'm using it on windows and I've understand the concept (a container is just a linux process with a bit more isolation than a classic process). Just open a new Ubuntu window and start playing with Docker!. Rather than twist things to use the existing init system, we just launch dockerd directly: There should be several lines of info, warnings related to cgroup blkio, and the like, with something like API listen on /mnt/wsl/shared-docker/docker.sock at the end. Hence I could put "tcp://localhost:2375" in VsCode and the calls will be redirected to dockerd running in WSL2-Ubuntu. Thank you! Microsoft's has step-by-step instructions on how to upgrade to WSL 2. With Docker Desktop's WSL 2 backend, Docker integrates with Windows in a fairly elegant way, and the docker client can be launched from either Powershell or Linux. WARN[2021-11-06T15:39:10.292307700+05:30] Please consider generating tls certificates with client validation to prevent exposing unauthenticated root access to your network host="tcp://169.254.255.121:2375" Contrary to what the length of this article might suggest, getting Docker working on WSL is fairly simple. I'm very interested if you have a simpler way to proceed :). Then in the elevated PowerShell install dockeraccesshelper with: Import the dockeraccesshelper module with: Note, if you encounter the following error: Run the following to enable execution of remote signed PowerShell scripts for the current user: Finally, we need to configure dockeraccesshelper by running: Substituting DOMAIN and USERNAME for the domain and username of your non-privileged user. As a next step we also would like to run them simultaneously. So I added some sleuthing to the Dockerfile: FROM centos:7 RUN cat /etc/resolv.conf && ping -v -c2 host.docker.internal && ping -v -c2 1.1.1.1 && ping -v google.com && ping -v mirrorlist.centos.org RUN echo "timeout=30" >> /etc/yum.conf && cat /etc/yum.conf && yum -y install httpd. sudo dockerd -H ifconfig eth0 | grep -E "([0-9]{1,3}. The service (dockerd) and client (docker) communicate over a socket and/or a network port. $ iptables --version If you are using it for work, and your company exceeds a certain size or revenue, then consider paying for a subscription. Built on Forem the open source software that powers DEV and other inclusive communities. DEV Community A constructive and inclusive social network for software developers. 2) We also need containerd installed - I used the manual steps from here and that worked for me howtoforge.com/how-to-install-cont Those two steps joined the dots and now docker is running without docker desktop :). To do so, we just need first to run a powershell script launching dockerd in WSL2 and once dockerd is listening we can simply use the command docker (maintained by Stefan Scherer). and run docker build with --add-host=host.docker.internal:host-gateway, I can see that I can ping the host from the container, but the container cannot seem to ping any external ip, even the cloudflare dns 1.1.1.1 or google's 8.8.8.8. This doesn't just apply to the terminal, either. Docker Desktop delivers the speed, choice and security you need for designing and delivering these containerized applications on your desktop. I suspect that most, however, will want to switch to iptables legacy. I only have one entry if I look for iptables: $ ls /usr/sbin/iptable* Full-Stack Developer at Elliptic Marketing LLC. So I wonder if Windows 10 wsl Debian changed - I can't use the update-alternatives --config iptables. ){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d: I am trying to follow the above steps on Alpine and i am not able to figure out the equivalent for launching dockerd to get the ip address. (See my article on using Windows Terminal for a convenient way to use WSL and Powershell.). Lastly, if you are working behind a proxy and need access to a private container registry, and get an x.509 certificate error with docker login, grab the root certificate of the proxy from your browser (export as base-64) and drop it into the docker certs directory related to your private registry/etc/docker/certs.d/{private_reg_name}:{private_reg_port}/ca.crt (private_reg_port is optional if you're using a standard port). If you dislike the Windows Store, there are other options. Do roots of these polynomials approach the negative of the Euler-Mascheroni constant? can you provide an example? Success? Maybe I did another mistake. My own .NET rest API runs as expected and so do other containers. For instance, VSCode supports docker in WSL 2. Through group membership, grant specific users privileged access to the Docker socket, Creates the shared docker directory for the socket and, For performance reasons, only bind mount from within the Linux filesystem. I've been reading both this and "Install Docker on Windows (WSL) without Docker Desktop". Setting up Docker for Windows Containers manually is not really that hard to do. Never miss out on developer content you need to maintain a healthy developer career. sudo apt remove docker docker-engine docker.io containerd runc, curl -fsSL https://download.docker.com/linux/${ID}/gpg | sudo apt-key add -, echo "deb [arch=amd64] https://download.docker.com/linux/${ID} ${VERSION_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/docker.list So we need to launch manually docker with the automatic collect of the IP address, sudo dockerd -H `ifconfig eth0 | grep -E "([0-9]{1,3}. What does not work is binding or mounting volumes to local directories, which used to work, when Docker Desktop was installed. They can still re-publish the post if they are not suspended. The client is Windows; the server is not. Hopefully you will see something like "Version 21H2. Here is what you can do to flag _nicolas_louis_: _nicolas_louis_ consistently posts content that violates DEV Community's Here I thought it was because the iptables didn't follow the instructions. You should see docker when you run the command groups to list group memberships." Get IP address in WSL2 My simple repo can have you up and running. For example, Windows 11 Home can use up to 128 GB (gigabytes) of RAM, while Windows 11 Pro supports a maximum of 2 TB ( terabytes) of RAM. For Windows Home - Enable Windows Subsystem for Linux (Instructions Here: https://docs.microsoft.com/en-us/windows/wsl/install-win10 ). Privacy Policy, This website uses cookies and Google Analytics to ensure you get the best experience on our website. I love POSIX as well, but I don't have a choice. Plain and simple. One is to expose dockerd over a TCP Port, or, better yet, set up an SSH server in WSL and connect that way. Hi, If you need to set a password, you can use passwd myusername (of course, in all of the above, use your username in place of "myusername.". Is there a way to make Windows paths work in my current scenario? On later versions of Alpine from the Microsoft Store, while a non-root user is created as part of setup, this user is initially password-less. Step-1: Download the " Docker Desktop for Windows " exe file from here ( https://hub.docker.com/editions/community/docker-ce-desktop-windows/) and run it to install. After walking through the steps in this article, you should now have a working and potentially auto-launched dockerd, shared Docker socket, and conveniently configured docker command. Refresh the page, check Medium 's site status, or find something interesting to read. Let's first make a shared directory for the docker socket, and set permissions so that the docker group can write to it. Use this image for your development process (developing, building and testing applications). ){3}[0-9]{1,3}" | grep -v 127.0.0.1 | awk '{ print $2 }' | cut -f2 -d:" And I can't see my eth0 configs in ifconfig command One mistake and you can cause irreparable damage to your Windows installation. Since Docker announced a new subscription for Docker Desktop for personal use, educational institutions, non-commercial open-source projects and small businesses, other enterprises need to acquire licences for all installations of Docker Desktop. When did this happen? You can skip this step, and proceed to updating packages and testing network connectivity, below. Thanks so much for this @jonathan Bowman, was really helpful, don't forget to do another article on installing docker-compose on a WSL Distro without passing through Docker Desktop, might be minimal but it would be a decent supplement to this awesome article of yours. I'm curious why you'd use a custom script to start dockerd rather than just using service docker start? I make games in my free time. Probably not necessary, but on Ubuntu/Debian: Alpine (probably not necessary, but just in case): Alpine: Nothing needed. For Linux containers you can install the Docker Daemon in WSL2. Install official Docker release sudo apt install docker-ce docker-ce-cli containerd.io Add user to docker group sudo usermod -aG docker $USER "Then close that WSL window, and launch WSL again. Some of the code examples above have been placed in scripts in a companion Github repo. If you don't want to rely on a particular WSL shell script, you could implement a Powershell function to launch dockerd, such as this: This function takes one parameter: the distro name. On Debian or Ubuntu, first temporarily set some OS-specific variables: Then, make sure that apt will trust the repo: ID will be either "ubuntu" or "debian", as appropriate, depending on what is in /etc/os-release. There are 2 choices for the alternative iptables (providing /usr/sbin/iptables). But in the end, turned out it was required. For this please install the Windows Store Version of WSL and afterwards enable systemd in the distro settings and reboot the WSL distro.. Now re-enter WSL to have systemd available and install Docker normally like explained in the docs. dpkg-query: no path found matching pattern /usr/sbin/iptables-legacy Thanks for contributing an answer to Stack Overflow! Such methods will be explored in a later article, but I encourage you, reader, to explore. Sometimes, one just needs Docker to work. Rancher Desktop seems to simplify things a lot for Windows users: Are you sure you want to hide this comment? Even with that, I will still run WSL on any Windows machine I can. That sounds odd. ko-fi.com/bowmanjd. Have you heard of portainer? Full-stack developer, focused on PHP/Laravel and Go fan. Let's take an easy example: i would like to run some networking tool that scans my machine . I summarize the files available here: No doubt there are ways these can be tweaked to be more useful and reliable; feel free to post in the comments. WARN[2021-10-24T16:24:00.993150800+05:30] grpc: addrConn.createTransport failed to connect to {unix:///var/run/docker/containerd/containerd.sock 0 }. iptables v1.6.0. The downside to this approach is that Docker static binaries on Windows do not support Linux containers, buildx, docker scan, or docker compose functionality. But let's continue magic ! I was able to run simple commands on Windows with docker like, docker run -it --rm ubuntu sh However, I could not find an option to switch it to run Windows container. A couple of updates when running in Windows 11H2 (and Ubuntu 22.04 in my case): 1) systemd is now native in Windows 11H2, BUT needs an updated WSL2 install (I was using WSL v0.63 and I believe native systemd support is in v0.68 onwards) - otherwise you get, Upgrading WSL to latest version means that updating /etc/wsl.conf with. I would prefer a prettier straight-foreward solution. I'm not sure what happened to the previous reply: $ dpkg -S /usr/sbin/iptables-legacy At this point if you run docker run hello-world:nanoserver as a non-privileged user, you will encounter the following error: One, to always use an elevated PowerShell to work with Docker. To tell what version you are running, run winver in Powershell or CMD, or just type Win key and R (-r) to open the Run dialog and then enter winver. To make it easy to use I have packaged it into a container, so it is easy to deploy with a single docker run. Previously with Docker Desktop we could run docker with -v %cd%/someFolder:/whatever or -v ./someFolder:/whatever, now we have to provide full path , like -v /mnt/c/full/local/path/to/someFolder:/whatever , which is user specific and will not run on team mate's computer Any thoughts how to overcome this ? at the end of the day, everybody still has bills to pay.. . In WSL2 change the service config to additionally expose the Docker Daemon on localhost: On Windows create a new context for the WSL host via PowerShell: Now you can easily run Windows and Linux containers simultaneously without switching like in Docker Desktop: You may not even need Docker Desktop if youre a poweruser not using the GUI. Windows Containers Is the underlining technology platform that allows us to run a Windows Container Instance which combines the usage of many Windows Server technology like Hyper-V, File Server, Networking, etc. It's a Web based docker ui. Same results more or less. How is Docker different from a virtual machine? You can even configure this in Windows Terminal: Second, my recommended method, is to use dockeraccesshelper to enable and configure access to the Docker Service for non-privileged users. There's no fight between Windows and Linux since wsl2. 0 upgraded, 0 newly installed, 1 reinstalled, 0 to remove and 0 not upgraded. They can still re-publish the post if they are not suspended. I am still running Linux on servers to this day. I did that but it did not work for me. If this is not a fresh install, and you may have experimented with docker before, then first clear out any residual docker installs: Docker utilizes iptables to implement network isolation. VS Code VS Code Remote Development; Docker Desktop for Windows; WSL2 Here are the problems I had on Ubuntu (note that I really wanted to work on linux since our servers run on linux) : I will readily admit being a Linux newbie despite I installed Slackware with Linux 0.99pl15 for the first time from a stack of floppies early 1994. Again, try wsl -l -q to see a list of your WSL distributions if you are unsure which one to use. I run this stack using this. Windows Containers requires Windows 10/11 Pro or Enterprise version 1607 or higher. . iptables v1.6.0, I think iptables installs when Debian itself is installed. The vague complaints of the Copilot plaintiffs are nothing compared to the damage to free software and human progress if they won. Is it possible to create a concave light? In the same PowerShell session enter: EDIT: It turned out that the eventual root cause of my issue was that my distribution was still on WSL1. For me, using WSL isn't a choice against Linux, but a choice to use Linux everywhere. How to copy files from host to Docker container? By default, they each may have a different ID, so a new one is in order. I'm flummoxed. If the above script is placed in .bashrc (most Linux distros) or .profile (distros like Alpine that have Ash/Dash as the default shell), or other shell init script, then it has an unfortunate side effect: you will likely be prompted for a password most every time a new terminal window is launched.
Fabric Bottle Bag Pattern,
Houses For Rent In Reading, Pa By Owner,
Barndominiums Of Georgia,
Lake Camelot Fisheree,
Articles W