The operating system of the container does not match - docker-for-windows

I have created a Windows Server 2016 VM, build 15063.2.
I installed Docker EE according to these instructions.
I can pull images and list them. But I cannot run them.
I tried running microsoft/windowsservercore using this command.
docker run -it microsoft/windowsservercore cmd
It fails saying the version of the OS doesn't match. Full error output is below.
docker: Error response from daemon: container
266a8f9f77f7ee57efb41ecd74001721b57fbbf1fc85150fd5156627782b6f61
encountered an error during CreateContainer: failure in a Windows
system call: The operating system of the container does not match the
operating system of the host. (0xc0370101) extra info:
{"SystemType":"Container","Name":"266a8f9f77f7ee57efb41ecd74001721b57fbbf1fc85150fd5156627782b6f61","Owner":"docker","IsDummy":false,"VolumePath":"\\?\Volume{8adf7e25-dc21-4bb9-8aaf-80408b5d5085}","IgnoreFlushesDuringBoot":true,"LayerFolderPath":"C:\ProgramData\docker\windowsfilter\266a8f9f77f7ee57efb41ecd74001721b57fbbf1fc85150fd5156627782b6f61","Layers":[{"ID":"9ca74b81-1d43-5ae3-b82e-4c584e5ebba7","Path":"C:\ProgramData\docker\windowsfilter\1e0c3f8d0cd7905b72efc4b4114c33b4585623e82a3d661636c68a5637a213d2"},{"ID":"86613523-d1d5-5b5b-8889-fc0c33a7d7ab","Path":"C:\ProgramData\docker\windowsfilter\31578f2c995a3891bb3af19de88efff45dbec9f9bdc6067c133abcf05a451171"}],"HostName":"266a8f9f77f7","MappedDirectories":[],"HvPartition":false,"EndpointList":["43f9f400-ce4f-48e9-89a1-b3b804285e61"],"Servicing":false,"AllowUnqualifiedDNSQuery":true}.
How do I figure the correct version of the host OS to use?

Related

Getting IoT Edge Agent error trying to run a Linux container on Windows host: "image operating system "linux" cannot be used on this platform"

I am trying to create an Azure IoT Edge device on a Windows host, but running a module built as a Linux container. In a previous experiment, I was able to successfully create an Azure IoT Edge device on a Linux host, and successfully running this same Linux container module.
However, when I deploy the module onto the Windows host, the module shows that it is not running, and when I view the module's log using "iotedge logs camera-capture" I get the following error:
<6> 2019-12-02 13:32:56.016 -08:00 [INF] - Executing command: "Create module camera-capture"
<3> 2019-12-02 13:33:11.674 -08:00 [ERR] - Executing command for operation ["create"] failed.
Microsoft.Azure.Devices.Edge.Agent.Edgelet.EdgeletCommunicationException- Message:Error calling Create module camera-capture: Could not create module camera-capture
caused by: Could not pull image localhost:5000/camera-capture-opencv:1.1.128-amd64
caused by: image operating system "linux" cannot be used on this platform, StatusCode:500, at: at Microsoft.Azure.Devices.Edge.Agent.Edgelet.Version_2019_01_30.ModuleManagementHttpClient.HandleException(Exception exception, String operation) in C:\agent\_work\4\s\edge-agent\src\Microsoft.Azure.Devices.Edge.Agent.Edgelet\version_2019_01_30\ModuleManagementHttpClient.cs:line 194
I have found no results online, or through Microsoft forums, regarding this particular error that was able to resolve my problem. For the record, I have ensured:
I am running a compatible Windows 10 host (17763)
I have Hyper-V and Containers installed
I have VT enabled in the BIOS
I have configured my deployment.template.json to build as "amd64" platform
I have configured my Docker Desktop to run using Linux Containers (and also enabled Experimental mode)
I have tested the basic "hello-world" ubuntu example online, and it works when I run it from Powershell, which proves that a Linux container will run on my Windows host
Any help would be greatly appreciated!
After spending a few days stuck on this issue, I finally found the solution. The problem was with the IoT Edge runtimes on Windows were not configured to handle Linux containers!
As of this writing, the solution is documented here by Microsoft: https://learn.microsoft.com/en-us/azure/iot-edge/how-to-install-iot-edge-windows-with-linux
But in case of a future dead link, you basically have to add additional flags when you install your Azure IoT Edge runtimes to handle linux containers.
. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; `
Deploy-IoTEdge -ContainerOs Linux
. {Invoke-WebRequest -useb aka.ms/iotedge-win} | Invoke-Expression; `
Initialize-IoTEdge -ContainerOs Linux
I changed Docker Desktop to Linux container mode and compiled in VSCode. It worked like magic.

Fatal Error DISPLAY variable set incorrectly: :0

I want to install oracle weblogic server. I already downloaded it and it's fmw_12.1.3.0.0_wls.jar. In order to install it I'm instructed to run java -jar fmw_12.1.3.0.0_wls.jar. But when I run it I get
(...)X-Server access is denied on host
[Fatal Error] DISPLAY variable set incorrectly: :0
[Resolution] Verify that your DISPLAY environment variable is set correctly,
and that there is an X11 server on the system. If you are
running the Oracle Installer as a different user or on a different host,
you may need to use the xhost command to ensure that host/user
has permission to write to your display.
Logs are located here: /tmp/OraInstall2019-03-16_10-36-23PM.
My system is: CentOS Linux release 7.6.1810 (Core) My java is: Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
I'm trying to perform this installation locally. I'm confused because every solution I came across assumed that I was logging via ssh or vnc server while I'm definitely not. What I tried:
set $JAVA_HOME to point to my jdk directory.
unset $ORACLE_HOME that was created for the database I have installed.
trying to set DISPLAY values to some other number than 0 (I know
its stupid but whatever).
reinstall java
I'm thinking if it might be the problem related with graphic drivers. Might it be that the defaults that were installed with X11 are somehow wrong? Or maybe centOS is not compatibile with this software? Should I maybe try oracle linux?
Add -Djava.awt.headless=true to your command line, e.g.
java -Djava.awt.headless=true -jar fmw_12.1.3.0.0_wls.jar
I solved my problem by using jdk 1.8 x64. This issue seemed to be caused by jdk 1.8 x86.
And yes, the problem was similar to yours. Give it a shot.

install weblogic on VM with Solaris OS

I stuck in install weblogic on my vm solaris. i try that
java -d64 -jar fmw_12.2.1.3.0_wls.jar
and i got an error
Checking monitor: must be configured to display at least 256 colors. DISPLAY environment variable not set. Failed <<<<
Any solution for these error?
This happens if you want to do an graphical install of the system without having a X11 running. The error message is quite normal for such an situation.
You could:
Not running the installer in the graphical mode by doing a silent install (please refer to https://docs.oracle.com/cd/E24329_01/doc.1211/e24492/silent.htm#WLSIG131 for information)
Install the nescessary package to have an X11 and stuff running in your VM with pkg install solaris-desktop. Then execute the java command again from the GUI . This obviously only works if you can get a the graphical output of the VM for example via VNC or other tools.
You could set the DISPLAY variable to an installed X11 implementation. For example i use Xquartz on my Apple notebook. Then configure DISPLAY and XAUTHORITY correctly. Or you could simply log into the Solaris system with ssh -X . I prefer the second one, as it does everything automatically.

IBM Mobilefirst CLI - Server start issue

I recently installed IBM MobileFirst CLI on my Mac, but I don't seem to be able to start the Server. See error below. I searched the internet and found that there is a bug in JDK which causes the JavaLaunchHelper error. I downloaded the beta version that supposedly fixes the issue from here - JDK Download Link
. But this doesn't help either. Any other help is appreciated.
Imayas-MBP:EmployeeDirectory imaya$ mfp start Initializing
MobileFirst Console. objc[18564]: Class JavaLaunchHelper is
implemented in both
/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/bin/java
and
/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/jre/lib/libinstrument.dylib.
One of the two will be used. Which one is undefined. Starting
server worklight. Server worklight start failed. Check server logs
for details.
/Users/imaya/.ibm/mobilefirst/6.3.0/server/wlp/bin/server: line 744:
18563 Abort trap: 6 "${JAVA_CMD}" "$#" > "${JAVA_CMD_LOG}"
2>&1 Error: The MobileFirst server failed to start. The port may be in
use by another instance of a running server, or the server may not
exist.
The JavaLaunchHelper error is not the problem here; Anyone using Java 7 will experience it, but things will work regardless.
The problem here is the second error:
The MobileFirst server failed to start. The port may be in use by
another instance of a running server, or the server may not exist.
Verify you do not have an already running server, that was started either by the CLI or by MFP Studio in an Eclipse installation.
In the command line, run mfp stop
In Eclipse, well, quit it
Make sure the Java process is not running
Then, start over. Using the CLI, create a new project and application and try to start the server. For example:
cd /Users/idanadar/Desktop
mfp create testProject
cd testProject
mfp add hybrid testApp
mfp start
mfp build
mfp deploy
mfp console
On OSX, you can locate and kill a process holding open a port using the following:
Run (assumes port 10080):
$ lsof -i :10080
Then if a process is shown, run the following using the shown Process ID:
$ kill -9 {PID}

How to get Sikuli working in headless mode

If we have a headless test server running sikuli (both ubuntu and windows configurations needed), how to get it work without a physical monitor and preferably for as many screen resolutions as possible.
I successfully got sikuli running in headless mode (no physical monitor connected)
Ubuntu: check Xvfb.
Windows: install display driver on the machine (to be headless) from virtualbox guest additions display drivers and use TightVNC to remotely set resolution from another machine.
Detailed steps for windows 7
Assume that:
Machine A: to be headless machine, windows 7, with vnc server ready (e.g. TightVNC server installed and waiting for connections).
Machine B: will be used to remotely setup the virtual display driver on machine A.
steps:
Download virtualbox guest additions iso file on Machine A from here (for latest version check latest version here and download VBoxGuestAdditions_x.y.z.iso)
Extract iso file (possibly with winrar) into a directory (let us call it folder D)
using command prompt cd to D folder
Driver extraction
-To extract the 32-bit drivers to "C:\Drivers", do the following:
VBoxWindowsAdditions-x86 /extract /D=C:\Drivers
-For the 64-bit drivers:
VBoxWindowsAdditions-amd64 /extract /D=C:\Drivers
Goto device manager
add hardware
Restart and connect with VNC viewer, now you should be able to change screen resolution
other valuable info on launchpad.
I got SikuliX working in a true headless mode in GCE with a Windows 2016 client system. It takes some duct tape and other Rube Goldberg contraptions to work, but it can be done.
The issue is that, for GCE (and probably AWS and other cloud environment Windows clients), you don't have a virtual video adapter and display, so, unless there's an open RDP connection to the client, it doesn't have a screen, and SikuliX/OpenCV will get a 1024x768 black desktop, and fail.
So, the question is, how to create an RDP connection without having an actual screen anywhere. I did this using Xvfb (X Windows virtual frame buffer). This does require a second VM, though. Xvfb runs on Linux. The other piece of the puzzle is xfreerdp 2.0. The 2.x version is required for compatibility with recent versions of Windows. 1.x is included with some Linux distros; 2.x may need to be built from sources, depending on what flavor Linux you're using. I'm using CentOS, which did require me to build my own.
The commands to establish the headless RDP session, once the pieces are in place, look something like this:
/usr/bin/Xvfb :0 -screen 0 1920x1080x24 &
export DISPLAY=:0.0
/usr/local/bin/xfreerdp /size:1920x1080 /u:[WindowsUser] /p:"[WindowsPassword]" /v:[WindowsTarget]
In our environment we automated this as part of the build job kicked off by Jenkins. For this to work under the Jenkins slave, it was also necessary to run the Jenkins slave as a user process, rather than a service... this can be accomplished by enabling auto admin login and setting the slave launch script as a run (on logon) command.
For those looking to automate on ec2 windows machines, this worked for me: http://www.allianceglobalservices.com/blog/executing-automation-suite-on-disconnectedlocked-machines
In summary, I used RDC to connect, put the following code in a batch file on remote desktop, double clicked it, and sikulix started working remotely (kicking me out of RDC at the same time). Note that ec2 windows machines default to 1024x768 when tscon takes over which may be too small so TightVnc can be used to increase the resolution to 1280x1024 before running.
tscon.exe 0 /dest:console
tscon.exe 1 /dest:console
tscon.exe 2 /dest:console
tscon.exe 3 /dest:console
START /DC:\Sikulix /WAIT /B C:\Sikulix\runsikulix.cmd -d 3 -r C:\test.sikuli -f C:\Sikulix\log.txt -d C:\Sikulix\userlog.txt
I just figure out a way to resolve similar issue.
My env:
local: windows pc
remote (for running sikulix + app I would like to test): windows ec2 instance
My way:
1.create a .bat file, its contents:
ping 127.0.0.1 -n 15 > nul
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (
%windir%\System32\tscon.exe %%s /dest:console
)
cd "\path\to\sikulix"
java -jar sikulixide-2.0.5.jar -r /path/to/sikulix -c > logfile.log
prepare your app
run the bat (right click > run as administrator)
ping will give your 10s, so that you can bring your app back to front
you will be disconnnected from rdp connection
Explanation:
ping is like "sleep"
for loop: kick out current user & keep session alive