I am working on a SQL Server 2017 Docker container. The database will never start.
I have customized the image only to run the health check. Same problem occurs without using the cusotmized Dockerfile.
The host machine has ipv6 completely disabled. Docker's daemon.json
has property "ipv6" : false
.
Dockerfile (out of date)
FROM mcr.microsoft.com/mssql/server:2017-latest-ubuntu
ENV ACCEPT_EULA=Y
EXPOSE 1433
HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=10 \
CMD /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -Q "SELECT 1" || exit 1
Log
2019-12-03 15:10:44.73 spid19s SQL Server could not spawn FRunCommunicationsManager thread. Check the SQL Server error log and the operating system error log for information about possible related problems.
2019-12-03 15:10:44.71 spid19s Server failed to listen on 'any' <ipv6> 1433. Error: 0x2742. To proceed, notify your system administrator.
2019-12-03 15:10:44.71 spid19s TDSSNIClient initialization failed with error 0x2742, status code 0xa. Reason: Unable to initialize the TCP/IP listener. A socket operation encountered a dead network.
2019-12-03 15:10:44.72 spid19s TDSSNIClient initialization failed with error 0x2742, status code 0x1. Reason: Initialization failed with an infrastructure error. Check for previous errors. A socket operation encountered a dead network.
2019-12-03 15:10:44.71 spid19s Error: 26024, Severity: 16, State: 1.
2019-12-03 15:10:44.71 spid19s Error: 17182, Severity: 16, State: 1.
2019-12-03 15:10:44.72 spid19s Error: 17182, Severity: 16, State: 1.
2019-12-03 15:10:44.72 spid19s Error: 17826, Severity: 18, State: 3.
2019-12-03 15:10:44.72 spid19s Could not start the network library because of an internal error in the network library. To determine the cause, review the errors immediately preceding this one in the error log.
2019-12-03 15:10:44.73 spid19s Error: 17120, Severity: 16, State: 1.
I have tried to run sysctl
on the container directly to explicitly disable ipv6, but seems not required.
$ sysctl -w net.ipv6.conf.all.disable_ipv6=1
sysctl: cannot stat /proc/sys/net/ipv6/conf/all/disable_ipv6: No such file or directory
Question: how do I fix this? Is the problem really related to ipv6 disconnectivity?
Any way to tell mssql
not to ever try to use ipv6?
Update
I have tried the following Dockerfile
FROM mcr.microsoft.com/mssql/server:2017-latest-ubuntu
ENV MSSQL_IP_ADDRESS=0.0.0.0
ENV ACCEPT_EULA=Y
ENV MSSQL_PID=Express
RUN MSSQL_IP_ADDRESS=0.0.0.0 /opt/mssql/bin/mssql-conf setup
EXPOSE 1433
HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=10 \
CMD /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SA_PASSWORD} -Q "SELECT 1" || exit 1
Error is
Building image...
Preparing build context archive...
[==================================================>]2/2 files
Done
Sending build context to Docker daemon...
[==================================================>] 566,0B
Done
Step 1/7 : FROM mcr.microsoft.com/mssql/server:2017-latest-ubuntu
---> cfe5615bf6a8
Step 2/7 : ENV MSSQL_IP_ADDRESS=0.0.0.0
---> Running in d65d0c977ea1
Removing intermediate container d65d0c977ea1
---> 358ed84b0ae7
Step 3/7 : ENV ACCEPT_EULA=Y
---> Running in b0a6b46edb0a
Removing intermediate container b0a6b46edb0a
---> ed69c043b383
Step 4/7 : ENV MSSQL_PID=Express
---> Running in e58a9930791c
Removing intermediate container e58a9930791c
---> 94f055e34ba0
Step 5/7 : RUN MSSQL_IP_ADDRESS=0.0.0.0 /opt/mssql/bin/mssql-conf setup
---> Running in 508cacc5158a
Traceback (most recent call last):
File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 279, in <module>
main()
File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 275, in main
processCommands()
File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 199, in processCommands
COMMAND_TABLE[args.which]()
File "/opt/mssql/bin/../lib/mssql-conf/mssql-conf.py", line 54, in handleSetup
exit(mssqlconfhelper.setupSqlServer(eulaAccepted, noprompt=args.noprompt))
File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 795, in setupSqlServer
if not checkInstall():
File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 765, in checkInstall
return runScript(checkInstallScript, True) == 0
File "/opt/mssql/lib/mssql-conf/mssqlconfhelper.py", line 754, in runScript
return subprocess.call([sudo, "-EH", pathToScript])
File "/usr/lib/python2.7/subprocess.py", line 523, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1343, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Error response from daemon: The command '/bin/sh -c MSSQL_IP_ADDRESS=0.0.0.0 /opt/mssql/bin/mssql-conf setup' returned a non-zero code: 1