Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unison invoked incorrectly too many roots #103

Closed
timstallmann opened this issue Aug 9, 2016 · 30 comments
Closed

Unison invoked incorrectly too many roots #103

timstallmann opened this issue Aug 9, 2016 · 30 comments

Comments

@timstallmann
Copy link

timstallmann commented Aug 9, 2016

Just started seeing this issue on the 0.1.0 branch. I updated my docker sync config per the migration docs.

docker-sync.yml contents:

syncs:
  site_www-sync:
    src: './'
    sync_host_ip: 'localhost'
    dest: '/var/www/html'
    sync_strategy: 'unison'

docker ps output:

f21d0fac8d2c        eugenmayer/unison:unox   "/entrypoint.sh super"   25 seconds ago      Up 25 seconds       127.0.0.1:32770->5000/tcp   site_www-sync

I've tried this with and without the sync_host_ip and that flag doesn't seem to impact the performance

@mickaelperrin
Copy link
Contributor

mickaelperrin commented Aug 9, 2016

Could you paste the output of docker-sync start ?

FYI, if not provided sync_host_ip is by default 'localhost'.

@timstallmann
Copy link
Author

timstallmann commented Aug 9, 2016

Sure! This is with verbose: true:

          ok  Starting unison
          ok  site_www-sync container not running
          ok  creating site_www-sync container
     command  docker run -p '127.0.0.1::5000'                               -v site_www-sync:/var/www/html                               -e UNISON_DIR=/var/www/html                               -e TZ=${TZ-`readlink /etc/localtime | sed -e 's,/usr/share/zoneinfo/,,'`}                                                                                             --name site_www-sync                               -d eugenmayer/unison:unox
          ok  starting initial sync of site_www-sync
     command  docker inspect --format=" {{ .NetworkSettings.Ports }} " site_www-sync | sed "s/.*map\[5000[^ ]\+\s\([0-9]\+\).*/\1/"
     command  unison /Users/tim/htdocs/site -auto -batch socket://localhost: map[5000/tcp:[{127.0.0.1 32770}]]
       error  Error starting sync, exit code 0
     message  Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

@mickaelperrin
Copy link
Contributor

mickaelperrin commented Aug 9, 2016

Thanks got it, there is a problem with sed. Could you paste the result of sed --version ? and sw_vers -productVersion ?

@timstallmann
Copy link
Author

sw_vers -ProductVersion is 10.11.6.. sed --version gives an illegal option error, as does sed -V

@mickaelperrin
Copy link
Contributor

Mmm, sorry, have to guess which sed version you are using. Could you please paste the result of man sed ? Use man sed | pbcopy then paste here.

@timstallmann
Copy link
Author

Ha sure -- I don't think I have anything installed locally that would override the OS X installation of sed


SED(1)                    BSD General Commands Manual                   SED(1)

N�NA�AM�ME�E
     s�se�ed�d -- stream editor

S�SY�YN�NO�OP�PS�SI�IS�S
     s�se�ed�d [-�-E�Ea�al�ln�n] _�c_�o_�m_�m_�a_�n_�d [_�f_�i_�l_�e _�._�._�.]
     s�se�ed�d [-�-E�Ea�al�ln�n] [-�-e�e _�c_�o_�m_�m_�a_�n_�d] [-�-f�f _�c_�o_�m_�m_�a_�n_�d_�__�f_�i_�l_�e] [-�-i�i _�e_�x_�t_�e_�n_�s_�i_�o_�n] [_�f_�i_�l_�e _�._�._�.]

D�DE�ES�SC�CR�RI�IP�PT�TI�IO�ON�N
     The s�se�ed�d utility reads the specified files, or the standard input if no
     files are specified, modifying the input as specified by a list of com-
     mands.  The input is then written to the standard output.

     A single command may be specified as the first argument to s�se�ed�d.  Multiple
     commands may be specified by using the -�-e�e or -�-f�f options.  All commands
     are applied to the input in the order they are specified regardless of
     their origin.

     The following options are available:

     -�-E�E      Interpret regular expressions as extended (modern) regular
             expressions rather than basic regular expressions (BRE's).  The
             re_format(7) manual page fully describes both formats.

     -�-a�a      The files listed as parameters for the ``w'' functions are cre-
             ated (or truncated) before any processing begins, by default.
             The -�-a�a option causes s�se�ed�d to delay opening each file until a com-
             mand containing the related ``w'' function is applied to a line
             of input.

     -�-e�e _�c_�o_�m_�m_�a_�n_�d
             Append the editing commands specified by the _�c_�o_�m_�m_�a_�n_�d argument to
             the list of commands.

     -�-f�f _�c_�o_�m_�m_�a_�n_�d_�__�f_�i_�l_�e
             Append the editing commands found in the file _�c_�o_�m_�m_�a_�n_�d_�__�f_�i_�l_�e to the
             list of commands.  The editing commands should each be listed on
             a separate line.

     -�-i�i _�e_�x_�t_�e_�n_�s_�i_�o_�n
             Edit files in-place, saving backups with the specified _�e_�x_�t_�e_�n_�s_�i_�o_�n.
             If a zero-length _�e_�x_�t_�e_�n_�s_�i_�o_�n is given, no backup will be saved.  It
             is not recommended to give a zero-length _�e_�x_�t_�e_�n_�s_�i_�o_�n when in-place
             editing files, as you risk corruption or partial content in situ-
             ations where disk space is exhausted, etc.

     -�-l�l      Make output line buffered.

     -�-n�n      By default, each line of input is echoed to the standard output
             after all of the commands have been applied to it.  The -�-n�n option
             suppresses this behavior.

     The form of a s�se�ed�d command is as follows:

           [address[,address]]function[arguments]

     Whitespace may be inserted before the first address and the function por-
     tions of the command.

     Normally, s�se�ed�d cyclically copies a line of input, not including its termi-
     nating newline character, into a _�p_�a_�t_�t_�e_�r_�n _�s_�p_�a_�c_�e, (unless there is some-
     thing left after a ``D'' function), applies all of the commands with
     addresses that select that pattern space, copies the pattern space to the
     standard output, appending a newline, and deletes the pattern space.

     Some of the functions use a _�h_�o_�l_�d _�s_�p_�a_�c_�e to save all or part of the pattern
     space for subsequent retrieval.

S�Se�ed�d A�Ad�dd�dr�re�es�ss�se�es�s
     An address is not required, but if specified must be a number (that
     counts input lines cumulatively across input files), a dollar (``$'')
     character that addresses the last line of input, or a context address
     (which consists of a regular expression preceded and followed by a delim-
     iter).

     A command line with no addresses selects every pattern space.

     A command line with one address selects all of the pattern spaces that
     match the address.

     A command line with two addresses selects an inclusive range.  This range
     starts with the first pattern space that matches the first address.  The
     end of the range is the next following pattern space that matches the
     second address.  If the second address is a number less than or equal to
     the line number first selected, only that line is selected.  In the case
     when the second address is a context address, s�se�ed�d does not re-match the
     second address against the pattern space that matched the first address.
     Starting at the first line following the selected range, s�se�ed�d starts look-
     ing again for the first address.

     Editing commands can be applied to non-selected pattern spaces by use of
     the exclamation character (``!'') function.

S�Se�ed�d R�Re�eg�gu�ul�la�ar�r E�Ex�xp�pr�re�es�ss�si�io�on�ns�s
     The regular expressions used in s�se�ed�d, by default, are basic regular
     expressions (BREs, see re_format(7) for more information), but extended
     (modern) regular expressions can be used instead if the -�-E�E flag is given.
     In addition, s�se�ed�d has the following two additions to regular expressions:

     1.   In a context address, any character other than a backslash (``\'')
          or newline character may be used to delimit the regular expression.
          Also, putting a backslash character before the delimiting character
          causes the character to be treated literally.  For example, in the
          context address \xabc\xdefx, the RE delimiter is an ``x'' and the
          second ``x'' stands for itself, so that the regular expression is
          ``abcxdef''.

     2.   The escape sequence \n matches a newline character embedded in the
          pattern space.  You cannot, however, use a literal newline character
          in an address or in the substitute command.

     One special feature of s�se�ed�d regular expressions is that they can default
     to the last regular expression used.  If a regular expression is empty,
     i.e., just the delimiter characters are specified, the last regular
     expression encountered is used instead.  The last regular expression is
     defined as the last regular expression used as part of an address or sub-
     stitute command, and at run-time, not compile-time.  For example, the
     command ``/abc/s//XXX/'' will substitute ``XXX'' for the pattern ``abc''.

S�Se�ed�d F�Fu�un�nc�ct�ti�io�on�ns�s
     In the following list of commands, the maximum number of permissible
     addresses for each command is indicated by [0addr], [1addr], or [2addr],
     representing zero, one, or two addresses.

     The argument _�t_�e_�x_�t consists of one or more lines.  To embed a newline in
     the text, precede it with a backslash.  Other backslashes in text are
     deleted and the following character taken literally.

     The ``r'' and ``w'' functions take an optional file parameter, which
     should be separated from the function letter by white space.  Each file
     given as an argument to s�se�ed�d is created (or its contents truncated) before
     any input processing begins.

     The ``b'', ``r'', ``s'', ``t'', ``w'', ``y'', ``!'', and ``:'' functions
     all accept additional arguments.  The following synopses indicate which
     arguments have to be separated from the function letters by white space
     characters.

     Two of the functions take a function-list.  This is a list of s�se�ed�d func-
     tions separated by newlines, as follows:

           { function
             function
             ...
             function
           }

     The ``{'' can be preceded by white space and can be followed by white
     space.  The function can be preceded by white space.  The terminating
     ``}'' must be preceded by a newline or optional white space.

     [2addr] function-list
             Execute function-list only when the pattern space is selected.

     [1addr]a\
     text    Write _�t_�e_�x_�t to standard output immediately before each attempt to
             read a line of input, whether by executing the ``N'' function or
             by beginning a new cycle.

     [2addr]b[label]
             Branch to the ``:'' function with the specified label.  If the
             label is not specified, branch to the end of the script.

     [2addr]c\
     text    Delete the pattern space.  With 0 or 1 address or at the end of a
             2-address range, _�t_�e_�x_�t is written to the standard output.

     [2addr]d
             Delete the pattern space and start the next cycle.

     [2addr]D
             Delete the initial segment of the pattern space through the first
             newline character and start the next cycle.

     [2addr]g
             Replace the contents of the pattern space with the contents of
             the hold space.

     [2addr]G
             Append a newline character followed by the contents of the hold
             space to the pattern space.

     [2addr]h
             Replace the contents of the hold space with the contents of the
             pattern space.

     [2addr]H
             Append a newline character followed by the contents of the pat-
             tern space to the hold space.

     [1addr]i\
     text    Write _�t_�e_�x_�t to the standard output.

     [2addr]l
             (The letter ell.)  Write the pattern space to the standard output
             in a visually unambiguous form.  This form is as follows:

                   backslash          \\
                   alert              \a
                   form-feed          \f
                   carriage-return    \r
                   tab                \t
                   vertical tab       \v

             Nonprintable characters are written as three-digit octal numbers
             (with a preceding backslash) for each byte in the character (most
             significant byte first).  Long lines are folded, with the point
             of folding indicated by displaying a backslash followed by a new-
             line.  The end of each line is marked with a ``$''.

     [2addr]n
             Write the pattern space to the standard output if the default
             output has not been suppressed, and replace the pattern space
             with the next line of input.

     [2addr]N
             Append the next line of input to the pattern space, using an
             embedded newline character to separate the appended material from
             the original contents.  Note that the current line number
             changes.

     [2addr]p
             Write the pattern space to standard output.

     [2addr]P
             Write the pattern space, up to the first newline character to the
             standard output.

     [1addr]q
             Branch to the end of the script and quit without starting a new
             cycle.

     [1addr]r file
             Copy the contents of _�f_�i_�l_�e to the standard output immediately
             before the next attempt to read a line of input.  If _�f_�i_�l_�e cannot
             be read for any reason, it is silently ignored and no error con-
             dition is set.

     [2addr]s/regular expression/replacement/flags
             Substitute the replacement string for the first instance of the
             regular expression in the pattern space.  Any character other
             than backslash or newline can be used instead of a slash to
             delimit the RE and the replacement.  Within the RE and the
             replacement, the RE delimiter itself can be used as a literal
             character if it is preceded by a backslash.

             An ampersand (``&'') appearing in the replacement is replaced by
             the string matching the RE.  The special meaning of ``&'' in this
             context can be suppressed by preceding it by a backslash.  The
             string ``\#'', where ``#'' is a digit, is replaced by the text
             matched by the corresponding backreference expression (see
             re_format(7)).

             A line can be split by substituting a newline character into it.
             To specify a newline character in the replacement string, precede
             it with a backslash.

             The value of _�f_�l_�a_�g_�s in the substitute function is zero or more of
             the following:

                   _�N       Make the substitution only for the _�N'th occurrence
                           of the regular expression in the pattern space.

                   g       Make the substitution for all non-overlapping
                           matches of the regular expression, not just the
                           first one.

                   p       Write the pattern space to standard output if a
                           replacement was made.  If the replacement string is
                           identical to that which it replaces, it is still
                           considered to have been a replacement.

                   w _�f_�i_�l_�e  Append the pattern space to _�f_�i_�l_�e if a replacement
                           was made.  If the replacement string is identical
                           to that which it replaces, it is still considered
                           to have been a replacement.

     [2addr]t [label]
             Branch to the ``:'' function bearing the label if any substitu-
             tions have been made since the most recent reading of an input
             line or execution of a ``t'' function.  If no label is specified,
             branch to the end of the script.

     [2addr]w _�f_�i_�l_�e
             Append the pattern space to the _�f_�i_�l_�e.

     [2addr]x
             Swap the contents of the pattern and hold spaces.

     [2addr]y/string1/string2/
             Replace all occurrences of characters in _�s_�t_�r_�i_�n_�g_�1 in the pattern
             space with the corresponding characters from _�s_�t_�r_�i_�n_�g_�2.  Any char-
             acter other than a backslash or newline can be used instead of a
             slash to delimit the strings.  Within _�s_�t_�r_�i_�n_�g_�1 and _�s_�t_�r_�i_�n_�g_�2, a
             backslash followed by an ``n'' is replaced by a newline charac-
             ter.  A pair of backslashes is replaced by a literal backslash.
             Finally, a backslash followed by any other character (except a
             newline) is that literal character.

     [2addr]!function
     [2addr]!function-list
             Apply the function or function-list only to the lines that are
             _�n_�o_�t selected by the address(es).

     [0addr]:label
             This function does nothing; it bears a label to which the ``b''
             and ``t'' commands may branch.

     [1addr]=
             Write the line number to the standard output followed by a new-
             line character.

     [0addr]
             Empty lines are ignored.

     [0addr]#
             The ``#'' and the remainder of the line are ignored (treated as a
             comment), with the single exception that if the first two charac-
             ters in the file are ``#n'', the default output is suppressed.
             This is the same as specifying the -�-n�n option on the command line.

E�EN�NV�VI�IR�RO�ON�NM�ME�EN�NT�T
     The COLUMNS, LANG, LC_ALL, LC_CTYPE and LC_COLLATE environment variables
     affect the execution of s�se�ed�d as described in environ(7).

E�EX�XI�IT�T S�ST�TA�AT�TU�US�S
     The s�se�ed�d utility exits 0 on success, and >0 if an error occurs.

L�LE�EG�GA�AC�CY�Y D�DE�ES�SC�CR�RI�IP�PT�TI�IO�ON�N
     Warnings are not generated for unused labels.  In legacy mode, they are.

     In the -�-y�y function, doubled backslashes are not converted to single ones.
     In legacy mode, they are.

     For more information about legacy mode, see compat(5).

S�SE�EE�E A�AL�LS�SO�O
     awk(1), ed(1), grep(1), regex(3), compat(5), re_format(7)

S�ST�TA�AN�ND�DA�AR�RD�DS�S
     The s�se�ed�d utility is expected to be a superset of the IEEE Std 1003.2
     (``POSIX.2'') specification.

     The -�-E�E, -�-a�a and -�-i�i options are non-standard FreeBSD extensions and may not
     be available on other operating systems.

H�HI�IS�ST�TO�OR�RY�Y
     A s�se�ed�d command, written by L. E. McMahon, appeared in Version 7 AT&T UNIX.

A�AU�UT�TH�HO�OR�RS�S
     Diomidis D. Spinellis <[email protected]>

B�BU�UG�GS�S
     Multibyte characters containing a byte with value 0x5C (ASCII `\') may be
     incorrectly treated as line continuation characters in arguments to the
     ``a'', ``c'' and ``i'' commands.  Multibyte characters cannot be used as
     delimiters with the ``s'' and ``y'' commands.

BSD                              May 10, 2005                              BSD

@timstallmann
Copy link
Author

@mickaelperrin FWIW other folks on my team here at http://www.savaslabs.com are seeing the same issue on their machines

@mickaelperrin
Copy link
Contributor

And please, whats the result ofdocker inspect --format=" {{ .NetworkSettings.Ports }} " site_www-sync` ?

@timstallmann
Copy link
Author

map[5000/tcp:[{127.0.0.1 32770}]]

@mickaelperrin
Copy link
Contributor

Thanks a lot, have sufficient informations to work on patch.

@timstallmann
Copy link
Author

Thanks!! 🌠

@mickaelperrin
Copy link
Contributor

Thanks for reporting, and sorry for the issue... PR #104 resolves it.

I will see with @EugenMayer to quickly release a new version.

EugenMayer added a commit that referenced this issue Aug 9, 2016
…ibility

[BUGFIX #103] Unison reports too many roots
@EugenMayer
Copy link
Owner

@mickaelperrin thank you and also @timstallmann thank you for taking your time to report that detailed 0.1.1 has just been release. Well done !

@pvledoux
Copy link

pvledoux commented Sep 7, 2016

Sorry to re-open this one, but I have the same issue:

ocker-sync start
          ok  Starting unison
       error  Error starting sync, exit code 126
     message
     message  Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]
For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

unison was invoked incorrectly (too many roots)
     success  Unison server started
       error  Error starting sync, exit code 126
     message
     message  Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

unison was invoked incorrectly (too many roots)
Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

unison was invoked incorrectly (too many roots)

docker-sync.yml

default: docker-compose-dev.yml
verbose: false
syncs:
  site-sync:
    src: './'
    dest: '/var/www/html'
    sync_host_ip: 'localhost'
    sync_strategy: 'unison'

docker-compose-dev.yml


version: '2'
services:
    app:
        volumes_from:
              - container:site-sync:rw

volumes:
  site-sync:
    external: true

And here is the ouput of docker inspect

map[873/tcp:[{0.0.0.0 10871}]]

@mickaelperrin
Copy link
Contributor

Thanks for reporting,

Could you provide the output of :

sed --version
/usr/bin/sed --version
/usr/local/bin/sed --version

Thanks

@pvledoux
Copy link

pvledoux commented Sep 7, 2016

sed --version
sed: illegal option -- -

/usr/bin/sed --version
/usr/bin/sed: illegal option -- -

/usr/local/bin/sed --version
zsh: no such file or directory: /usr/local/bin/sed

Not much info here I'm afraid ;)

@mickaelperrin
Copy link
Contributor

How did you install docker_sync ? Using gem or by building manually ?

@pvledoux
Copy link

pvledoux commented Sep 7, 2016

With gem:

gem install docker-sync

@mickaelperrin
Copy link
Contributor

mickaelperrin commented Sep 7, 2016

What's the output of docker inspect --format=" {{ .NetworkSettings.Ports }} " YOUR_SYNC_CONTAINER | sed "s/.*map\[5000[^ ]\+\s\([0-9]\+\).*/\1/" ?

Could you enable the verbose mode and paste again the output ?

EDIT: change the sync container name

@mickaelperrin
Copy link
Contributor

And could you give also the version of docker-sync used ? gem list | grep docker-sync

@pvledoux
Copy link

pvledoux commented Sep 7, 2016

I dropped all containers, rebooted and started again, and replace sync_host_ip: 'localhost' by sync_host_ip: 127.0.0.1 because I had a error saying that ip was not correct. Now it looks to work correctly. Sorry for the false alarm. Thanks a lot!

@mickaelperrin
Copy link
Contributor

Great 👍

@EugenMayer
Copy link
Owner

@michael See my lastest checkin were i introduced 127.0.0.1 and removed localhost

@derimagia
Copy link

This seems to happen when you have a volume that exists that matches your syncs that isn't unison. I had a volume left as rsync since it's the default strategy and this error was happening because of it.

@karneaud
Copy link

karneaud commented Oct 30, 2016

Having a similar issue this was my output when docker-sync start

      ok  Starting unison
      ok  ether-unison-sync container still running, restarting unison in container
 command  docker exec ether-unison-sync supervisorctl restart unison
      ok  starting initial sync of ether-unison-sync
 command  docker inspect --format=" {{ .NetworkSettings.Ports }} " ether-unison-sync | /usr/bin/sed  -E "s/.*map\[5000[^ ]+ ([0-9]*)[^0-9].*/\1/"
 command  unison -ignore='Path .gitignore' -ignore='Path .git/' -ignore='Path .dockerignore' -ignore='Path node_modules/' -ignore='Path build/' -ignore='Path target/' -ignore='Path *.yml' -ignore='Path *.xml' -ignore='Path *.md' -ignore='Path .DS_Store' /Users/kendallarneaud/Documents/Git/ehter-truff -auto -batch socket://192.168.99.100:32769
   error  Error starting sync, exit code 0
 message  
 message  Contacting server...

Fatal error: Failed to connect to the server on host 192.168.99.100:32769
success Unison server started
command docker inspect --format=" {{ .NetworkSettings.Ports }} " ether-unison-sync | /usr/bin/sed -E "s/.map[5000[^ ]+ ([0-9])[^0-9]./\1/"
command unison -ignore='Path .gitignore' -ignore='Path .git/' -ignore='Path .dockerignore' -ignore='Path node_modules/' -ignore='Path build/' -ignore='Path target/' -ignore='Path *.yml' -ignore='Path *.xml' -ignore='Path *.md' -ignore='Path .DS_Store' /Users/kendallarneaud/Documents/Git/ehter-truff -auto -batch socket://192.168.99.100:32769
error Error starting sync, exit code 0
message
message Contacting server...
Fatal error: Failed to connect to the server on host 192.168.99.100:32769
command docker inspect --format=" {{ .NetworkSettings.Ports }} " ether-unison-sync | /usr/bin/sed -E "s/.map[5000[^ ]+ ([0-9])[^0-9].
/\1/"
command unison -ignore='Path .gitignore' -ignore='Path .git/' -ignore='Path .dockerignore' -ignore='Path node_modules/' -ignore='Path build/' -ignore='Path target/' -ignore='Path *.yml' -ignore='Path *.xml' -ignore='Path *.md' -ignore='Path .DS_Store' /Users/kendallarneaud/Documents/Git/ehter-truff -auto -batch socket://192.168.99.100:32769 -repeat watch
Contacting server...
Fatal error: Failed to connect to the server on host 192.168.99.100:32769

I too had a rsync container before I switched so I just shutdown everything and restarted....but still no dice even though I changed the name.

I'm using latest docker-sync(0.1.4)

@EugenMayer
Copy link
Owner

@karneaud please open a new issue, i think yours is different. Please read the migration guide of rsync -> unison (the syntax of excludes is different ). But lets cover that in a different issue

@hyzhak
Copy link

hyzhak commented Feb 12, 2017

I've got the same error. And I have tried to reboot but it doesn't help

docker-compose.yml

version: '2'
services:
  ai:
    build: .
    command: /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser
    ports:
      - "8888:8888"

docker-compose.dev.yml

version: '2'
services:
  ai:
    volumes:
      - ai-sync:/opt/notebooks/:rw

volumes:
  ai-sync:
    external: true

docker-sync.yml

options:
  verbose: true # make the whole sync verbose
syncs:
  #IMPORTANT: ensure this name is unique and does not match your other application container name
  ai-sync: #tip: add -sync and you keep consistent names als a convention
    src: './'
    dest: '/opt/notebooks'
    sync_strategy: "unison"
    sync_excludes: ['.*/.git']
    sync_host_ip: '127.0.0.1' #localhost gives the same result
    sync_host_port: 10872

result of docker-sync start

$ docker-sync start
          ok  Starting unison
          ok  ai-sync container still running, restarting unison in container
     command  docker exec ai-sync supervisorctl restart unison
          ok  starting initial sync of ai-sync
     command  docker inspect --format=" {{ .NetworkSettings.Ports }} " ai-sync | /usr/bin/sed  -E "s/.*map\[5000[^ ]+ ([0-9]*)[^0-9].*/\1/"
     command  unison -ignore='Path .*/.git' /Users/hyzhak/IdeaProjects/machine-learning/anaconda3-experience -auto -batch socket://127.0.0.1: map[873/tcp:[{0.0.0.0 10872}]]
       error  Error starting sync, exit code 126
     message
     message  Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

unison was invoked incorrectly (too many roots)
     success  Unison server started
     command  docker inspect --format=" {{ .NetworkSettings.Ports }} " ai-sync | /usr/bin/sed  -E "s/.*map\[5000[^ ]+ ([0-9]*)[^0-9].*/\1/"
     command  unison -ignore='Path .*/.git' /Users/hyzhak/IdeaProjects/machine-learning/anaconda3-experience -auto -batch socket://127.0.0.1: map[873/tcp:[{0.0.0.0 10872}]]
       error  Error starting sync, exit code 126
     message
     message  Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

unison was invoked incorrectly (too many roots)
     command  docker inspect --format=" {{ .NetworkSettings.Ports }} " ai-sync | /usr/bin/sed  -E "s/.*map\[5000[^ ]+ ([0-9]*)[^0-9].*/\1/"
     command  unison -ignore='Path .*/.git' /Users/hyzhak/IdeaProjects/machine-learning/anaconda3-experience -auto -batch socket://127.0.0.1: map[873/tcp:[{0.0.0.0 10872}]]  -repeat watch
Usage: unison [options]
    or unison root1 root2 [options]
    or unison profilename [options]

For a list of options, type "unison -help".
For a tutorial on basic usage, type "unison -doc tutorial".
For other documentation, type "unison -doc topics".

unison was invoked incorrectly (too many roots)

docker inspect

$ docker inspect --format=" {{ .NetworkSettings.Ports }} " ai-sync
 map[873/tcp:[{0.0.0.0 10872}]]

sw_vers

$ sw_vers -productVersion
10.10.5

sed

$ sed --version
sed: illegal option -- -
$ /usr/bin/sed --version
/usr/bin/sed: illegal option -- -
$ /usr/local/bin/sed --version
-bash: /usr/local/bin/sed: No such file or directory

and

man sed

results the same as for @timstallmann. Btw it seems that there is no way in osx to do that http://stackoverflow.com/questions/37639496/how-can-i-check-the-version-of-sed-in-os-x

In my case it is:

$ strings `which sed`
$FreeBSD: src/usr.bin/sed/compile.c,v 1.28 2005/08/04 10:05:11 dds Exp $
$FreeBSD: src/usr.bin/sed/main.c,v 1.36 2005/05/10 13:40:50 glebius Exp $
$FreeBSD: src/usr.bin/sed/misc.c,v 1.10 2004/08/09 15:29:41 dds Exp $
$FreeBSD: src/usr.bin/sed/process.c,v 1.39 2005/04/09 14:31:41 stefanf Exp $

Unison

$ unison -version
unison version 2.48.4

docker-sync

0.1.5

@hyzhak
Copy link

hyzhak commented Feb 12, 2017

ok, It seems I have move one step farther - I have removed sync volume (it was initially created with rsync) and now I get new error:

$ docker-sync start
          ok  Starting unison
          ok  ai-sync container still running, restarting unison in container
     command  docker exec ai-sync supervisorctl restart unison
          ok  starting initial sync of ai-sync
     command  docker inspect --format=" {{ .NetworkSettings.Ports }} " ai-sync | /usr/bin/sed  -E "s/.*map\[5000[^ ]+ ([0-9]*)[^0-9].*/\1/"
     command  unison -ignore='Path .*/.git' /Users/hyzhak/IdeaProjects/machine-learning/anaconda3-experience -auto -batch socket://127.0.0.1:32768
       error  Error starting sync, exit code 0
     message
     message  Contacting server...
Fatal error: Failed to connect to the server on host 127.0.0.1:32768
     success  Unison server started
     command  docker inspect --format=" {{ .NetworkSettings.Ports }} " ai-sync | /usr/bin/sed  -E "s/.*map\[5000[^ ]+ ([0-9]*)[^0-9].*/\1/"
     command  unison -ignore='Path .*/.git' /Users/hyzhak/IdeaProjects/machine-learning/anaconda3-experience -auto -batch socket://127.0.0.1:32768
       error  Error starting sync, exit code 0
     message
     message  Contacting server...
Fatal error: Failed to connect to the server on host 127.0.0.1:32768
     command  docker inspect --format=" {{ .NetworkSettings.Ports }} " ai-sync | /usr/bin/sed  -E "s/.*map\[5000[^ ]+ ([0-9]*)[^0-9].*/\1/"
     command  unison -ignore='Path .*/.git' /Users/hyzhak/IdeaProjects/machine-learning/anaconda3-experience -auto -batch socket://127.0.0.1:32768 -repeat watch
Contacting server...
Fatal error: Failed to connect to the server on host 127.0.0.1:32768
$ docker ps -a | grep unison
9195e5d22906        eugenmayer/unison:unox   "/entrypoint.sh super"   2 minutes ago       Up 2 minutes                    127.0.0.1:32770->5000/tcp       ai-sync

@hyzhak
Copy link

hyzhak commented Feb 12, 2017

ok, I got where was problem, I have used incorrect sync_host_ip. It should be got by:

docker-machine ip <name>

it won't be stable and can change from time to time. Maybe it will be better way to use docker-machine name instead?

@govindsah
Copy link

Hi @hyzhak, I need your help to understand the use of command mentioned here

Thanks in advance!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants